summaryrefslogtreecommitdiffstatshomepage
path: root/plugins/data/init.lua
diff options
context:
space:
mode:
author Miodrag Milanović <mmicko@gmail.com>2016-09-07 14:27:35 +0200
committer GitHub <noreply@github.com>2016-09-07 14:27:35 +0200
commitfa4b5bdee60e7aa95b435f0a1198a314de815fb1 (patch)
tree2ee3ba6bfc502db21c8454eb4648fc0219419568 /plugins/data/init.lua
parent42ab14dc64fec61d27cd9c6da7d8e7bb8e5f24f1 (diff)
parent9d101cad6a9834c5645f20c152466267ab13845f (diff)
Merge pull request #1368 from cracyc/lua_dats
Move UI dats to lua plugin
Diffstat (limited to 'plugins/data/init.lua')
-rw-r--r--plugins/data/init.lua85
1 files changed, 85 insertions, 0 deletions
diff --git a/plugins/data/init.lua b/plugins/data/init.lua
new file mode 100644
index 00000000000..83cf194af11
--- /dev/null
+++ b/plugins/data/init.lua
@@ -0,0 +1,85 @@
+-- license:BSD-3-Clause
+-- copyright-holders:Carl
+-- A data script should contain two functions check which takes a set name and returns the data
+-- heading if it supports the set otherwise nil and get which returns the data
+-- the script should be named data_<name>.lua
+-- this is set default on in the plugin.json
+local exports = {}
+exports.name = "data"
+exports.version = "0.0.1"
+exports.description = "Data plugin"
+exports.license = "The BSD 3-Clause License"
+exports.author = { name = "Carl" }
+
+local data = exports
+
+function data.set_folder(path)
+ data.path = path
+end
+
+function data.startplugin()
+ local data_scr = {}
+ local valid_lst = {}
+ local cur_set
+ local cur_list
+ emu.register_start(function()
+ data_scr = {}
+ for file in lfs.dir(data.path) do
+ local name = string.match(file, "^(data_.*).lua$")
+ if name then
+ local script = require("data/" .. name)
+ if script then
+ data_scr[#data_scr + 1] = script
+ end
+ end
+ end
+ end)
+ emu.register_callback(function(set)
+ local ret
+ if set == cur_set then
+ return cur_list
+ elseif set == "" then
+ set = cur_set
+ else
+ cur_set = set
+ end
+ if not set then
+ return nil
+ end
+ valid_lst = {}
+ for num, scr in ipairs(data_scr) do
+ local setname, softname = set:match("^([^,]+),?(.*)$")
+ if softname == "" then
+ softname = nil
+ end
+ local name = scr.check(setname, softname)
+ if name then
+ if not ret then
+ ret = name
+ else
+ ret = ret .. "," .. name
+ end
+ valid_lst[#valid_lst + 1] = scr
+ end
+ end
+ cur_list = ret
+ return ret
+ end, "data_list")
+
+ emu.register_callback(function(num)
+ return valid_lst[num + 1].get()
+ end, "data")
+
+ emu.register_callback(function(num)
+ local ver
+ if valid_lst[num + 1].ver then
+ ver = valid_lst[num + 1].ver()
+ end
+ if ver then
+ return ver
+ end
+ return ""
+ end, "data_version")
+end
+
+return exports