local colors = require("colors") local component = require("component") local shell = require("shell") local sides = require("sides") if not component.isAvailable("redstone") then io.stderr:write("This program requires a redstone card or redstone I/O block.\n") return 1 end local rs = component.redstone local args, options = shell.parse(...) if #args == 0 and not options.w and not options.f then io.write("Usage:\n") io.write(" redstone []\n") if rs.setBundledOutput then io.write(" redstone -b []\n") end if rs.setWirelessOutput then io.write(" redstone -w []\n") io.write(" redstone -f []\n") end return end if options.w then if not rs.setWirelessOutput then io.stderr:write("wireless redstone not available\n") return 1 end if #args > 0 then local value = args[1] if tonumber(value) then value = tonumber(value) > 0 else value = ({["true"]=true,["on"]=true,["yes"]=true})[value] ~= nil end rs.setWirelessOutput(value) end io.write("in: " .. tostring(rs.getWirelessInput()) .. "\n") io.write("out: " .. tostring(rs.getWirelessOutput()) .. "\n") elseif options.f then if not rs.setWirelessOutput then io.stderr:write("wireless redstone not available\n") return 1 end if #args > 0 then local value = args[1] if not tonumber(value) then io.stderr:write("invalid frequency\n") return 1 end rs.setWirelessFrequency(tonumber(value)) end io.write("freq: " .. tostring(rs.getWirelessFrequency()) .. "\n") else local side = sides[args[1]] if not side then io.stderr:write("invalid side\n") return 1 end if type(side) == "string" then side = sides[side] end if options.b then if not rs.setBundledOutput then io.stderr:write("bundled redstone not available\n") return 1 end local color = colors[args[2]] if not color then io.stderr:write("invalid color\n") return 1 end if type(color) == "string" then color = colors[color] end if #args > 2 then local value = args[3] if tonumber(value) then value = tonumber(value) else value = ({["true"]=true,["on"]=true,["yes"]=true})[value] and 255 or 0 end rs.setBundledOutput(side, color, value) end io.write("in: " .. rs.getBundledInput(side, color) .. "\n") io.write("out: " .. rs.getBundledOutput(side, color) .. "\n") else if #args > 1 then local value = args[2] if tonumber(value) then value = tonumber(value) else value = ({["true"]=true,["on"]=true,["yes"]=true})[value] and 15 or 0 end rs.setOutput(side, value) end io.write("in: " .. rs.getInput(side) .. "\n") io.write("out: " .. rs.getOutput(side) .. "\n") end end