summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mesecons_microcontroller/init.lua32
1 files changed, 18 insertions, 14 deletions
diff --git a/mesecons_microcontroller/init.lua b/mesecons_microcontroller/init.lua
index 89a7736..2ff6596 100644
--- a/mesecons_microcontroller/init.lua
+++ b/mesecons_microcontroller/init.lua
@@ -154,15 +154,15 @@ function parse_get_params(code, starti)
return nil, nil
end
-function yc_parse_get_eeprom_params(code, starti)
+function yc_parse_get_eeprom_param(cond, starti)
i = starti
s = nil
- local params = {}
+ local addr
while s ~= "" do
- s = string.sub(code, i, i)
- if s == ">" then
- table.insert(params, string.sub(code, starti, i-1)) -- i: ) i+1 after )
- return params, i + 1
+ s = string.sub(cond, i, i)
+ if string.find("0123456789", s) == nil or s == "" then
+ addr = string.sub(cond, starti, i-1) -- i: last number i+1 after last number
+ return addr, i
end
if s == "," then return nil, nil end
i = i + 1
@@ -242,16 +242,13 @@ function yc_command_if_parsecondition(cond, L, eeprom)
cond = string.gsub(cond, "C", tonumber(L.c and 1 or 0))
cond = string.gsub(cond, "D", tonumber(L.d and 1 or 0))
- cond = string.gsub(cond, "!0", "1")
- cond = string.gsub(cond, "!1", "0")
-
local i = 1
local l = string.len(cond)
while i<=l do
local s = cond:sub(i,i)
- if s == "<" then
- params, endi = yc_parse_get_eeprom_params(cond, i+1)
- buf = yc_eeprom_read(tonumber(params[1]), eeprom)
+ if s == "#" then
+ addr, endi = yc_parse_get_eeprom_param(cond, i+1)
+ buf = yc_eeprom_read(tonumber(addr), eeprom)
if buf == nil then return nil end
local call = cond:sub(i, endi-1)
cond = string.gsub(cond, call, buf)
@@ -261,6 +258,9 @@ function yc_command_if_parsecondition(cond, L, eeprom)
i = i + 1
end
+ cond = string.gsub(cond, "!0", "1")
+ cond = string.gsub(cond, "!1", "0")
+
local i = 2
local l = string.len(cond)
while i<=l do
@@ -269,6 +269,7 @@ function yc_command_if_parsecondition(cond, L, eeprom)
local a = tonumber(cond:sub(i+1, i+1))
if cond:sub(i+1, i+1) == nil then break end
if s == "=" then
+ if a==nil then return nil end
if a == b then buf = "1" end
if a ~= b then buf = "0" end
cond = string.gsub(cond, b..s..a, buf)
@@ -286,6 +287,7 @@ function yc_command_if_parsecondition(cond, L, eeprom)
local a = tonumber(cond:sub(i+1, i+1))
if cond:sub(i+1, i+1) == nil then break end
if s == "&" then
+ if a==nil then return nil end
local buf = ((a==1) and (b==1))
if buf == true then buf = "1" end
if buf == false then buf = "0" end
@@ -294,6 +296,7 @@ function yc_command_if_parsecondition(cond, L, eeprom)
l = string.len(cond)
end
if s == "|" then
+ if a==nil then return nil end
local buf = ((a == 1) or (b == 1))
if buf == true then buf = "1" end
if buf == false then buf = "0" end
@@ -302,6 +305,7 @@ function yc_command_if_parsecondition(cond, L, eeprom)
l = string.len(cond)
end
if s == "~" then
+ if a==nil then return nil end
local buf = (((a == 1) or (b == 1)) and not((a==1) and (b==1)))
if buf == true then buf = "1" end
if buf == false then buf = "0" end
@@ -315,8 +319,8 @@ function yc_command_if_parsecondition(cond, L, eeprom)
end
function yc_eeprom_read(number, eeprom)
- if params == nil then return nil, nil end
- value = eeprom:sub(params[1], number)
+ if number == nil then return nil, nil end
+ value = eeprom:sub(number, number)
if value == nil then return nil, nil end
return value, endi
end