mirror of
https://github.com/holub/mame
synced 2025-07-04 09:28:51 +03:00
Added parsing of plugin json files for machine_manager (nw)
This commit is contained in:
parent
5e23c377cf
commit
315612190b
@ -1,9 +1,10 @@
|
|||||||
{
|
{
|
||||||
"plugin": {
|
"plugin": {
|
||||||
"name": "dummy",
|
"name": "dummy",
|
||||||
|
"description": "Dummy test plugin",
|
||||||
"version": "0.0.1",
|
"version": "0.0.1",
|
||||||
"author": "Miodrag Milanovic",
|
"author": "Miodrag Milanovic",
|
||||||
"type": "plugin",
|
"type": "plugin",
|
||||||
"start": "false",
|
"start": "false"
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,9 +1,10 @@
|
|||||||
{
|
{
|
||||||
"plugin": {
|
"plugin": {
|
||||||
"name": "hiscore",
|
"name": "hiscore",
|
||||||
|
"description": "Hiscore support",
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"author": "borgar@borgar.net",
|
"author": "borgar@borgar.net",
|
||||||
"type": "plugin",
|
"type": "plugin",
|
||||||
"start": "false",
|
"start": "false"
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,8 +1,9 @@
|
|||||||
{
|
{
|
||||||
"plugin": {
|
"plugin": {
|
||||||
"name": "json",
|
"name": "json",
|
||||||
|
"description": "json library",
|
||||||
"version": "2.5.0",
|
"version": "2.5.0",
|
||||||
"author": "David Kolf",
|
"author": "David Kolf",
|
||||||
"type": "library",
|
"type": "library"
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -25,6 +25,7 @@ includedirs {
|
|||||||
MAME_DIR .. "src/devices", -- till deps are fixed
|
MAME_DIR .. "src/devices", -- till deps are fixed
|
||||||
MAME_DIR .. "src/lib",
|
MAME_DIR .. "src/lib",
|
||||||
MAME_DIR .. "src/lib/util",
|
MAME_DIR .. "src/lib/util",
|
||||||
|
MAME_DIR .. "3rdparty/rapidjson/include",
|
||||||
MAME_DIR .. "3rdparty",
|
MAME_DIR .. "3rdparty",
|
||||||
GEN_DIR .. "emu",
|
GEN_DIR .. "emu",
|
||||||
GEN_DIR .. "emu/layout",
|
GEN_DIR .. "emu/layout",
|
||||||
@ -169,6 +170,8 @@ files {
|
|||||||
MAME_DIR .. "src/emu/network.h",
|
MAME_DIR .. "src/emu/network.h",
|
||||||
MAME_DIR .. "src/emu/parameters.cpp",
|
MAME_DIR .. "src/emu/parameters.cpp",
|
||||||
MAME_DIR .. "src/emu/parameters.h",
|
MAME_DIR .. "src/emu/parameters.h",
|
||||||
|
MAME_DIR .. "src/emu/pluginopts.cpp",
|
||||||
|
MAME_DIR .. "src/emu/pluginopts.h",
|
||||||
MAME_DIR .. "src/emu/output.cpp",
|
MAME_DIR .. "src/emu/output.cpp",
|
||||||
MAME_DIR .. "src/emu/output.h",
|
MAME_DIR .. "src/emu/output.h",
|
||||||
MAME_DIR .. "src/emu/render.cpp",
|
MAME_DIR .. "src/emu/render.cpp",
|
||||||
|
@ -110,6 +110,7 @@ machine_manager* machine_manager::instance()
|
|||||||
machine_manager::machine_manager(emu_options &options,osd_interface &osd)
|
machine_manager::machine_manager(emu_options &options,osd_interface &osd)
|
||||||
: m_osd(osd),
|
: m_osd(osd),
|
||||||
m_options(options),
|
m_options(options),
|
||||||
|
m_plugins(std::make_unique<plugin_options>()),
|
||||||
m_lua(global_alloc(lua_engine)),
|
m_lua(global_alloc(lua_engine)),
|
||||||
m_new_driver_pending(nullptr),
|
m_new_driver_pending(nullptr),
|
||||||
m_machine(nullptr)
|
m_machine(nullptr)
|
||||||
@ -157,6 +158,12 @@ void machine_manager::start_luaengine()
|
|||||||
{
|
{
|
||||||
m_lua->initialize();
|
m_lua->initialize();
|
||||||
{
|
{
|
||||||
|
path_iterator iter(options().plugins_path());
|
||||||
|
std::string pluginpath;
|
||||||
|
while (iter.next(pluginpath, ""))
|
||||||
|
{
|
||||||
|
m_plugins->parse_json(pluginpath);
|
||||||
|
}
|
||||||
emu_file file(options().plugins_path(), OPEN_FLAG_READ);
|
emu_file file(options().plugins_path(), OPEN_FLAG_READ);
|
||||||
osd_file::error filerr = file.open("boot.lua");
|
osd_file::error filerr = file.open("boot.lua");
|
||||||
if (filerr == osd_file::error::NONE)
|
if (filerr == osd_file::error::NONE)
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
#define __MAME_H__
|
#define __MAME_H__
|
||||||
|
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
|
#include "pluginopts.h"
|
||||||
|
|
||||||
class osd_interface;
|
class osd_interface;
|
||||||
|
|
||||||
@ -76,6 +77,7 @@ public:
|
|||||||
|
|
||||||
osd_interface &osd() const;
|
osd_interface &osd() const;
|
||||||
emu_options &options() const { return m_options; }
|
emu_options &options() const { return m_options; }
|
||||||
|
plugin_options &plugins() const { return *m_plugins; }
|
||||||
lua_engine *lua() { return m_lua; }
|
lua_engine *lua() { return m_lua; }
|
||||||
|
|
||||||
running_machine *machine() { return m_machine; }
|
running_machine *machine() { return m_machine; }
|
||||||
@ -91,7 +93,7 @@ public:
|
|||||||
private:
|
private:
|
||||||
osd_interface & m_osd; // reference to OSD system
|
osd_interface & m_osd; // reference to OSD system
|
||||||
emu_options & m_options; // reference to options
|
emu_options & m_options; // reference to options
|
||||||
|
std::unique_ptr<plugin_options> m_plugins; // pointer to plugin options
|
||||||
lua_engine * m_lua;
|
lua_engine * m_lua;
|
||||||
|
|
||||||
const game_driver * m_new_driver_pending; // pointer to the next pending driver
|
const game_driver * m_new_driver_pending; // pointer to the next pending driver
|
||||||
|
97
src/emu/pluginopts.cpp
Normal file
97
src/emu/pluginopts.cpp
Normal file
@ -0,0 +1,97 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:Miodrag Milanovic
|
||||||
|
/***************************************************************************
|
||||||
|
|
||||||
|
pluginopts.cpp
|
||||||
|
|
||||||
|
Plugin options manager.
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
#include <fstream>
|
||||||
|
#include "emu.h"
|
||||||
|
#include "pluginopts.h"
|
||||||
|
|
||||||
|
#include <rapidjson/document.h>
|
||||||
|
#include <rapidjson/error/en.h>
|
||||||
|
#include <rapidjson/istreamwrapper.h>
|
||||||
|
#include <fstream>
|
||||||
|
|
||||||
|
//**************************************************************************
|
||||||
|
// PLUGIN OPTIONS
|
||||||
|
//**************************************************************************
|
||||||
|
|
||||||
|
const options_entry plugin_options::s_option_entries[] =
|
||||||
|
{
|
||||||
|
{ nullptr, nullptr, OPTION_HEADER, "PLUGINS OPTIONS" },
|
||||||
|
{ nullptr }
|
||||||
|
};
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// plugin_options - constructor
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
plugin_options::plugin_options()
|
||||||
|
: core_options()
|
||||||
|
{
|
||||||
|
add_entries(plugin_options::s_option_entries);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void plugin_options::parse_json(std::string path)
|
||||||
|
{
|
||||||
|
// first try to open as a directory
|
||||||
|
osd_directory *directory = osd_opendir(path.c_str());
|
||||||
|
if (directory != nullptr)
|
||||||
|
{
|
||||||
|
// iterate over all files in the directory
|
||||||
|
for (const osd_directory_entry *entry = osd_readdir(directory); entry != nullptr; entry = osd_readdir(directory))
|
||||||
|
{
|
||||||
|
if (entry->type == ENTTYPE_FILE)
|
||||||
|
{
|
||||||
|
std::string name = entry->name;
|
||||||
|
if (name == "plugin.json")
|
||||||
|
{
|
||||||
|
std::string curfile = std::string(path).append(PATH_SEPARATOR).append(entry->name);
|
||||||
|
std::ifstream ifs(curfile);
|
||||||
|
rapidjson::IStreamWrapper isw(ifs);
|
||||||
|
rapidjson::Document document;
|
||||||
|
document.ParseStream<0>(isw);
|
||||||
|
|
||||||
|
if (document.HasParseError()) {
|
||||||
|
std::string error(GetParseError_En(document.GetParseError()));
|
||||||
|
osd_printf_error("Unable to parse plugin definition file %s. Errors returned:\n", curfile.c_str());
|
||||||
|
osd_printf_error("%s\n", error.c_str());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (document["plugin"].IsObject())
|
||||||
|
{
|
||||||
|
std::string name = document["plugin"]["name"].GetString();
|
||||||
|
std::string description = document["plugin"]["description"].GetString();
|
||||||
|
std::string type = document["plugin"]["type"].GetString();
|
||||||
|
bool start = false;
|
||||||
|
if (document["plugin"].HasMember("start") && (std::string(document["plugin"]["start"].GetString()) == "true"))
|
||||||
|
start = true;
|
||||||
|
|
||||||
|
if (type=="plugin")
|
||||||
|
{
|
||||||
|
add_entry(core_strdup(name.c_str()),core_strdup(description.c_str()), OPTION_BOOLEAN, start ? "1" : "0");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (entry->type == ENTTYPE_DIR)
|
||||||
|
{
|
||||||
|
std::string name = entry->name;
|
||||||
|
if (!(name == "." || name == ".."))
|
||||||
|
{
|
||||||
|
parse_json(path + PATH_SEPARATOR + name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// close the directory and be done
|
||||||
|
osd_closedir(directory);
|
||||||
|
}
|
||||||
|
}
|
29
src/emu/pluginopts.h
Normal file
29
src/emu/pluginopts.h
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:Miodrag Milanovic
|
||||||
|
/***************************************************************************
|
||||||
|
|
||||||
|
pluginopts.cpp
|
||||||
|
|
||||||
|
Plugin options manager.
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#ifndef __PLUGIN_OPTS_H__
|
||||||
|
#define __PLUGIN_OPTS_H__
|
||||||
|
|
||||||
|
#include "options.h"
|
||||||
|
|
||||||
|
class plugin_options : public core_options
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
// construction/destruction
|
||||||
|
plugin_options();
|
||||||
|
|
||||||
|
void parse_json(std::string path);
|
||||||
|
private:
|
||||||
|
static const options_entry s_option_entries[];
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* __PLUGIN_OPTS_H__ */
|
Loading…
Reference in New Issue
Block a user