From ce72ed2babec7cfc5f650e4e240e6d94a79e704e Mon Sep 17 00:00:00 2001 From: Jeija Date: Fri, 10 Aug 2012 10:47:40 +0200 Subject: [PATCH] Add print command print(string in quotes or condition, can be concatenated using comma) --- mesecons_microcontroller/init.lua | 33 ++++++++++++++++++++++++++++--- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/mesecons_microcontroller/init.lua b/mesecons_microcontroller/init.lua index 530a2cf..74c1366 100644 --- a/mesecons_microcontroller/init.lua +++ b/mesecons_microcontroller/init.lua @@ -141,8 +141,12 @@ end --Code Parsing function yc_code_remove_commentary(code) + is_string = false for i = 1, #code do - if code:sub(i, i) == ":" then + if code:sub(i, i) == '"' then + is_string = (is_string==false) --toggle is_string + end + if code:sub(i, i) == ":" and is_string==false then return code:sub(1, i-1) end end @@ -181,6 +185,9 @@ function parse_yccode(code, pos) L = yc_command_on (params, Lvirtual) elseif command == "off" then L = yc_command_off(params, Lvirtual) + elseif command == "print" then + su = yc_command_print(params, eeprom, yc_merge_portstates(Lreal, Lvirtual)) + if su ~= true then return nil end elseif command == "sbi" then new_eeprom, Lvirtual = yc_command_sbi (params, eeprom, yc_merge_portstates(Lreal, Lvirtual), Lvirtual) if new_eeprom == nil then return nil @@ -227,13 +234,17 @@ function parse_get_params(code, starti) i = starti s = nil local params = {} + local is_string = false while s ~= "" do s = string.sub(code, i, i) - if s == ")" then + if code:sub(i, i) == '"' then + is_string = (is_string==false) --toggle is_string + end + if s == ")" and is_string == false then table.insert(params, string.sub(code, starti, i-1)) -- i: ) i+1 after ) return params, i + 1 end - if s == "," then + if s == "," and is_string == false then table.insert(params, string.sub(code, starti, i-1)) -- i: ) i+1 after ) starti = i + 1 end @@ -315,6 +326,22 @@ function yc_command_off(params, L) return L end +function yc_command_print(params, eeprom, L) + local s = "" + for i, param in ipairs(params) do + if param:sub(1,1) == '"' and param:sub(#param, #param) == '"' then + s = s..param:sub(2, #param-1) + else + r = yc_command_parsecondition(param, L, eeprom) + if r == "1" or r == "0" then + s = s..r + else return nil end + end + end + print(s) --don't remove + return true +end + function yc_command_sbi(params, eeprom, L, Lv) if params[1]==nil or params[2]==nil or params[3] ~=nil then return nil end local status = yc_command_parsecondition(params[2], L, eeprom)