summaryrefslogtreecommitdiffstatshomepage
path: root/plugins/autofire/autofire_save.lua
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/autofire/autofire_save.lua')
-rw-r--r--plugins/autofire/autofire_save.lua52
1 files changed, 31 insertions, 21 deletions
diff --git a/plugins/autofire/autofire_save.lua b/plugins/autofire/autofire_save.lua
index 543b36ec7c8..f863b003f4d 100644
--- a/plugins/autofire/autofire_save.lua
+++ b/plugins/autofire/autofire_save.lua
@@ -1,7 +1,7 @@
local lib = {}
local function get_settings_path()
- return lfs.env_replace(manager:machine():options().entries.homepath:value():match('([^;]+)')) .. '/autofire/'
+ return manager.machine.options.entries.homepath:value():match('([^;]+)') .. '/autofire'
end
local function get_settings_filename()
@@ -9,23 +9,26 @@ local function get_settings_filename()
end
local function initialize_button(settings)
- if settings.port and settings.field and settings.key and settings.on_frames and settings.off_frames then
+ if settings.port and settings.mask and settings.type and settings.key and settings.on_frames and settings.off_frames then
+ local ioport = manager.machine.ioport
local new_button = {
port = settings.port,
- field = settings.field,
- key = manager:machine():input():seq_from_tokens(settings.key),
+ mask = settings.mask,
+ type = ioport:token_to_input_type(settings.type),
+ key = manager.machine.input:seq_from_tokens(settings.key),
+ key_cfg = settings.key,
on_frames = settings.on_frames,
off_frames = settings.off_frames,
counter = 0
}
- local port = manager:machine():ioport().ports[settings.port]
+ local port = ioport.ports[settings.port]
if port then
- local field = port.fields[settings.field]
- if field then
+ local field = port:field(settings.mask)
+ if field and (field.type == new_button.type) then
new_button.button = field
- return new_button
end
end
+ return new_button
end
return nil
end
@@ -33,14 +36,15 @@ end
local function serialize_settings(button_list)
local settings = {}
for index, button in ipairs(button_list) do
- setting = {
+ local setting = {
port = button.port,
- field = button.field,
- key = manager:machine():input():seq_to_tokens(button.key),
+ mask = button.mask,
+ type = manager.machine.ioport:input_type_to_token(button.type),
+ key = button.key_cfg,
on_frames = button.on_frames,
off_frames = button.off_frames
}
- settings[#settings + 1] = setting
+ table.insert(settings, setting)
end
return settings
end
@@ -48,13 +52,15 @@ end
function lib:load_settings()
local buttons = {}
local json = require('json')
- local file = io.open(get_settings_path() .. get_settings_filename(), 'r')
+ local filename = get_settings_path() .. '/' .. get_settings_filename()
+ local file = io.open(filename, 'r')
if not file then
return buttons
end
local loaded_settings = json.parse(file:read('a'))
file:close()
if not loaded_settings then
+ emu.print_error(string.format('Error loading autofire settings: error parsing file "%s" as JSON', filename))
return buttons
end
for index, button_settings in ipairs(loaded_settings) do
@@ -69,23 +75,27 @@ end
function lib:save_settings(buttons)
local path = get_settings_path()
local attr = lfs.attributes(path)
- if not attr then
- lfs.mkdir(path)
- elseif attr.mode ~= 'directory' then
+ if attr and (attr.mode ~= 'directory') then
+ emu.print_error(string.format('Error saving autofire settings: "%s" is not a directory', path))
return
end
+ local filename = path .. '/' .. get_settings_filename()
if #buttons == 0 then
- os.remove(path .. get_settings_filename())
+ os.remove(filename)
return
+ elseif not attr then
+ lfs.mkdir(path)
end
local json = require('json')
local settings = serialize_settings(buttons)
local data = json.stringify(settings, {indent = true})
- local file = io.open(path .. get_settings_filename(), 'w')
- if file then
- file:write(data)
- file:close()
+ local file = io.open(filename, 'w')
+ if not file then
+ emu.print_error(string.format('Error saving autofire settings: error opening file "%s" for writing', filename))
+ return
end
+ file:write(data)
+ file:close()
end
return lib