function read(filename) local file=io.open(filename,"r") if file==nil then return nil end local content=file:read("*a") file:close() return content end function write(filename, new_content) local file=io.open(filename,"w") if file==nil then return false end file:write(new_content) file:close() return true end function append(filename, new_content) local file=io.open(filename,"a") if file==nil then return false end file:write(new_content) file:close() return true end function exists(filename) local file=io.open(filename, "r") if file==nil then return false end file:close() return true end function create_if_not_exists(filename, content) if not exists(filename) then write(filename, content or "") return true end return false end function create_if_not_exists_from_file(filename, src_filename) return create_if_not_exists(filename, read(src_filename)) end -- Process Bridge Helpers process_bridges={} function process_bridge_build(name, input, output, logs) if not input or not output or not logs then minetest.mkdir(minetest.get_worldpath().."/bridges/"..name) end input=input or minetest.get_worldpath().."/bridges/"..name.."/input.txt" output=output or minetest.get_worldpath().."/bridges/"..name.."/output.txt" logs=logs or minetest.get_worldpath().."/bridges/"..name.."/logs.txt" -- Clear input write(input, "") -- Clear output write(output, "") -- Create logs if not exists create_if_not_exists(logs, "") process_bridges[name]={input=input, output=output, logs=logs, output_file=io.open(output,"a")} end function process_bridge_listen(name, line_consumer, step) local bridge=process_bridges[name] modlib.minetest.register_globalstep(step or 0.1, function(dtime) local content=io.open(bridge.input, "r") local line=content:read() while line do line_consumer(line) line=content:read() end write(bridge.input, "") end) end function process_bridge_serve(name, step) local bridge=process_bridges[name] modlib.minetest.register_globalstep(step or 0.1, function(dtime) bridge.output_file:close() process_bridges[name].output_file=io.open(bridge.output,"a") end) end function process_bridge_write(name, message) local bridge=process_bridges[name] bridge.output_file:write(message.."\n") --append(bridge.input, message) end function process_bridge_start(name, command, os_execute) local bridge=process_bridges[name] os_execute(string.format(command, bridge.output, bridge.input, bridge.logs)) end