summaryrefslogtreecommitdiffstatshomepage
path: root/plugins/cheat
diff options
context:
space:
mode:
author cracyc <cracyc@users.noreply.github.com>2016-04-07 19:38:18 -0500
committer cracyc <cracyc@users.noreply.github.com>2016-04-07 19:42:18 -0500
commitd88bdb6869f49548dfa4ddfd7a5dd43a4df594b2 (patch)
treeeb555bfebd63803da48693b39c1b11bfa493fa93 /plugins/cheat
parent9f95c2e6cb5aa3c48cfc499d45ba9f705385f23e (diff)
plugins/cheat: fix more (nw)
Diffstat (limited to 'plugins/cheat')
-rw-r--r--plugins/cheat/init.lua4
-rw-r--r--plugins/cheat/xml_conv.lua48
2 files changed, 32 insertions, 20 deletions
diff --git a/plugins/cheat/init.lua b/plugins/cheat/init.lua
index 705ecca77cb..94542aaafae 100644
--- a/plugins/cheat/init.lua
+++ b/plugins/cheat/init.lua
@@ -190,8 +190,8 @@ function cheat.startplugin()
local scr
scr = manager:machine().screens[screen]
if not scr then
- print("error loading cheat script: " .. cheat.desc)
- cheat = nil
+ local tag
+ tag, scr = next(manager:machine().screens) -- get any screen
return
end
cheat.cheat_env[name] = scr
diff --git a/plugins/cheat/xml_conv.lua b/plugins/cheat/xml_conv.lua
index c38d590ef14..712e4027c15 100644
--- a/plugins/cheat/xml_conv.lua
+++ b/plugins/cheat/xml_conv.lua
@@ -2,6 +2,12 @@ local xml = {}
-- basic xml parser for mamecheat only
local function xml_parse(data)
+ local function fix_gt(str)
+ str = str:gsub(">=", " ge ")
+ str = str:gsub(">", " gt ")
+ return str
+ end
+ data = data:gsub("(condition=%b\"\")", fix_gt)
local cheat_str = data:match("<mamecheat.->(.*)</ *mamecheat>")
local function get_tags(str)
@@ -98,20 +104,24 @@ function xml.conv_cheat(data)
data = data:lower()
data = data:gsub("^[(](.-)[)]$", "%1")
- data = data:gsub("lt", "<")
- data = data:gsub("ge", ">=")
- data = data:gsub("gt", ">")
- data = data:gsub("le", "<=")
+ data = data:gsub("%f[%w]lt%f[%W]", "<")
+ data = data:gsub("%f[%w]ge%f[%W]", ">=")
+ data = data:gsub("%f[%w]gt%f[%W]", ">")
+ data = data:gsub("%f[%w]le%f[%W]", "<=")
+ data = data:gsub("%f[%w]eq%f[%W]", "==")
+ data = data:gsub("%f[%w]ne%f[%W]", "~=")
data = data:gsub("!=", "~=")
- data = data:gsub("frame", frame)
- data = data:gsub("band", "&")
- data = data:gsub("bor", "|")
- data = data:gsub("rshift", ">>")
- data = data:gsub("lshift", "<<")
+ data = data:gsub("||", " or ")
+ data = data:gsub("%f[%w]frame%f[%W]", frame)
+ data = data:gsub("%f[%w]band%f[%W]", "&")
+ data = data:gsub("%f[%w]bor%f[%W]", "|")
+ data = data:gsub("%f[%w]rshift%f[%W]", ">>")
+ data = data:gsub("%f[%w]lshift%f[%W]", "<<")
+ data = data:gsub("(%w-)%+%+", "%1 = %1 + 1")
data = data:gsub("%f[%w](%x+)%f[%W]", "0x%1")
- data = data:gsub("([%w_:]-).([pmrodi3])([bwdq])@(%w+) *(=*)", convert_memref)
+ data = data:gsub("([%w_:]-)%.([pmrodi3]-)([bwdq])@(%w+) *(=*)", convert_memref)
repeat
- data, count = data:gsub("([%w_:]-).([pmrodi3])([bwdq])@(%b()) *(=*)", convert_memref)
+ data, count = data:gsub("([%w_:]-)%.([pmrodi3]-)([bwdq])@(%b()) *(=*)", convert_memref)
until count == 0
if write then
data = data .. ")"
@@ -132,14 +142,16 @@ function xml.conv_cheat(data)
str = str .. ", \"auto\""
end
str = str .. ", nil,\"" .. data["format"] .. "\""
- for count, block in pairs(data["argument"]) do
- local expr = convert_expr(block["text"])
- if block["count"] then
- for i = 0, block["count"] - 1 do
- str = str .. "," .. expr:gsub("argindex", i)
+ if data["argument"] then
+ for count, block in pairs(data["argument"]) do
+ local expr = convert_expr(block["text"])
+ if block["count"] then
+ for i = 0, block["count"] - 1 do
+ str = str .. "," .. expr:gsub("argindex", i)
+ end
+ else
+ str = str .. "," .. expr
end
- else
- str = str .. "," .. expr
end
end
return str .. ")"