mirror of
				https://github.com/minetest-mods/mesecons.git
				synced 2025-11-04 12:55:29 +01:00 
			
		
		
		
	Define second parameter of sbi as condition
This commit is contained in:
		@@ -72,7 +72,7 @@ function update_yc(pos)
 | 
			
		||||
	if parse_yccode(code, pos) == nil then
 | 
			
		||||
		meta:set_string("infotext", "Code not valid!")
 | 
			
		||||
	else
 | 
			
		||||
		meta:set_string("infotext", "Programmed Microcontroller")
 | 
			
		||||
		meta:set_string("infotext", "Working Microcontroller")
 | 
			
		||||
	end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
@@ -111,7 +111,9 @@ function parse_yccode(code, pos)
 | 
			
		||||
		elseif command == "off" then
 | 
			
		||||
			L = yc_command_off(params, L)
 | 
			
		||||
		elseif command == "sbi" then
 | 
			
		||||
			eeprom = yc_command_sbi (params, eeprom)
 | 
			
		||||
			new_eeprom = yc_command_sbi (params, eeprom, L)
 | 
			
		||||
			if new_eeprom == nil then return nil
 | 
			
		||||
			else eeprom = new_eeprom end
 | 
			
		||||
		elseif command == "if" then --nothing
 | 
			
		||||
		else
 | 
			
		||||
			return nil
 | 
			
		||||
@@ -196,13 +198,14 @@ function yc_command_off(params, L)
 | 
			
		||||
	return L
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
function yc_command_sbi(params, eeprom)
 | 
			
		||||
	if params[1]==nil or params[2]==nil or params[3] ~=nil or tonumber(params[1])==nil or tonumber(params[2])==nil then return nil end
 | 
			
		||||
	if tonumber(params[1])>EEPROM_SIZE or tonumber(params[1])<1 or (tonumber(params[2])~=1 and tonumber(params[2]~=0)) then return nil end
 | 
			
		||||
function yc_command_sbi(params, eeprom, L)
 | 
			
		||||
	if params[1]==nil or params[2]==nil or params[3] ~=nil or tonumber(params[1])==nil then return nil end
 | 
			
		||||
	local status = yc_command_parsecondition(params[2], L, eeprom)
 | 
			
		||||
	if tonumber(params[1])>EEPROM_SIZE or tonumber(params[1])<1 or (status ~= "0" and status ~= "1") then return nil end
 | 
			
		||||
	new_eeprom = "";
 | 
			
		||||
	for i=1, #eeprom do
 | 
			
		||||
		if tonumber(params[1])==i then 
 | 
			
		||||
			new_eeprom = new_eeprom..params[2] 
 | 
			
		||||
			new_eeprom = new_eeprom..status
 | 
			
		||||
		else
 | 
			
		||||
			new_eeprom = new_eeprom..eeprom:sub(i, i)
 | 
			
		||||
		end
 | 
			
		||||
@@ -214,7 +217,7 @@ function yc_command_if(code, starti, L, eeprom)
 | 
			
		||||
	local cond, endi = yc_command_if_getcondition(code, starti)
 | 
			
		||||
	if cond == nil then return nil end
 | 
			
		||||
 | 
			
		||||
	cond = yc_command_if_parsecondition(cond, L, eeprom)
 | 
			
		||||
	cond = yc_command_parsecondition(cond, L, eeprom)
 | 
			
		||||
 | 
			
		||||
	if cond == "0" then result = false
 | 
			
		||||
	elseif cond == "1" then result = true
 | 
			
		||||
@@ -246,7 +249,8 @@ function yc_command_if_getcondition(code, starti)
 | 
			
		||||
	return nil, nil
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
function yc_command_if_parsecondition(cond, L, eeprom)
 | 
			
		||||
function yc_command_parsecondition(cond, L, eeprom)
 | 
			
		||||
	print("parsing condition: "..cond)
 | 
			
		||||
	cond = string.gsub(cond, "A", tostring(L.a and 1 or 0))
 | 
			
		||||
	cond = string.gsub(cond, "B", tonumber(L.b and 1 or 0))
 | 
			
		||||
	cond = string.gsub(cond, "C", tonumber(L.c and 1 or 0))
 | 
			
		||||
@@ -267,10 +271,10 @@ function yc_command_if_parsecondition(cond, L, eeprom)
 | 
			
		||||
		end
 | 
			
		||||
		i = i + 1
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
	print(cond)
 | 
			
		||||
	cond = string.gsub(cond, "!0", "1")
 | 
			
		||||
	cond = string.gsub(cond, "!1", "0")
 | 
			
		||||
 | 
			
		||||
	print(cond)
 | 
			
		||||
	local i = 2
 | 
			
		||||
	local l = string.len(cond)
 | 
			
		||||
	while i<=l do
 | 
			
		||||
@@ -288,7 +292,7 @@ function yc_command_if_parsecondition(cond, L, eeprom)
 | 
			
		||||
		end
 | 
			
		||||
		i = i + 1
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
	print(cond)
 | 
			
		||||
	local i = 2 
 | 
			
		||||
	local l = string.len(cond)
 | 
			
		||||
	while i<=l do
 | 
			
		||||
@@ -325,6 +329,7 @@ function yc_command_if_parsecondition(cond, L, eeprom)
 | 
			
		||||
		end
 | 
			
		||||
		i = i + 1
 | 
			
		||||
	end
 | 
			
		||||
	print(cond)
 | 
			
		||||
	return cond
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user