Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function getChar(str, pos)
- return str:sub(pos, pos)
- end
- function numbertoBinary(dec)
- dec = tonumber(dec)
- dec=dec*2
- local bin=""
- for i=0,7 do
- bin=bin..tostring(math.ceil(math.floor(dec/2)%2))
- dec=math.floor(dec/2)
- end
- return string.reverse(bin)
- end
- function numberfromBinary(bin)
- return tonumber(bin, 2)
- end
- function getNumber(str)
- count = 0
- for k,v in pairs(numbers) do
- count = count+1
- if v=="str" then return count end
- end
- end
- function toBinary(str)
- bin = ""
- for i=1, #str do
- local a = getChar(str, i)
- if a=="\n" then a = "end of line" end
- local b = getNumber(a)
- bin = bin..numbertoBinary(b)
- end
- return bin
- end
- function fromBinary(str)
- count = 0
- temp = ""
- tempt = {}
- result = ""
- for i=1, #str do
- count = count+1
- temp = temp..str[i]
- if count==8 then
- table.insert(tempt, temp)
- temp = ""
- count = 0
- end
- end
- for i=1, #tempt do
- local a = numberfromBinary(tempt[i])
- if a=="end of line" then a = "\n" end
- result = result..temp
- end
- temp = nil
- count = nil
- tempt = nil
- return result
- end
- numbers = {}
- numbers["1"] = " "
- numbers["2"] = "!"
- numbers["3"] = '"'
- numbers["4"] = "#"
- numbers["5"] = "$"
- numbers["6"] = "%"
- numbers["7"] = "&"
- numbers["8"] = "'"
- numbers["9"] = "("
- numbers["10"] = ")"
- numbers["11"] = "*"
- numbers["12"] = "+"
- numbers["13"] = ","
- numbers["14"] = "-"
- numbers["15"] = "."
- numbers["16"] = "/"
- numbers["17"] = "0"
- numbers["18"] = "1"
- numbers["19"] = "2"
- numbers["20"] = "3"
- numbers["21"] = "4"
- numbers["22"] = "5"
- numbers["23"] = "6"
- numbers["24"] = "7"
- numbers["25"] = "8"
- numbers["26"] = "9"
- numbers["27"] = ":"
- numbers["28"] = ";"
- numbers["29"] = "<"
- numbers["30"] = "="
- numbers["31"] = ">"
- numbers["32"] = "?"
- numbers["33"] = "@"
- numbers["34"] = "A"
- numbers["35"] = "B"
- numbers["36"] = "C"
- numbers["37"] = "D"
- numbers["38"] = "E"
- numbers["39"] = "F"
- numbers["40"] = "G"
- numbers["41"] = "H"
- numbers["42"] = "I"
- numbers["43"] = "J"
- numbers["44"] = "K"
- numbers["45"] = "L"
- numbers["46"] = "M"
- numbers["47"] = "N"
- numbers["48"] = "O"
- numbers["49"] = "P"
- numbers["50"] = "Q"
- numbers["51"] = "R"
- numbers["52"] = "S"
- numbers["53"] = "T"
- numbers["54"] = "U"
- numbers["55"] = "V"
- numbers["56"] = "W"
- numbers["57"] = "X"
- numbers["58"] = "Y"
- numbers["59"] = "Z"
- numbers["60"] = "["
- numbers["61"] = "\\"
- numbers["62"] = "]"
- numbers["63"] = "^"
- numbers["64"] = "_"
- numbers["65"] = "`"
- numbers["66"] = "a"
- numbers["67"] = "b"
- numbers["68"] = "c"
- numbers["69"] = "d"
- numbers["70"] = "e"
- numbers["71"] = "f"
- numbers["72"] = "g"
- numbers["73"] = "h"
- numbers["74"] = "i"
- numbers["75"] = "j"
- numbers["76"] = "k"
- numbers["77"] = "l"
- numbers["78"] = "m"
- numbers["79"] = "n"
- numbers["80"] = "o"
- numbers["81"] = "p"
- numbers["82"] = "q"
- numbers["83"] = "r"
- numbers["84"] = "s"
- numbers["85"] = "t"
- numbers["86"] = "u"
- numbers["87"] = "v"
- numbers["88"] = "w"
- numbers["89"] = "x"
- numbers["90"] = "y"
- numbers["91"] = "z"
- numbers["92"] = "{"
- numbers["93"] = "|"
- numbers["94"] = "}"
- numbers["95"] = "~"
- numbers["96"] = "end of line"
- numbers["97"] = "ping"
- line = "back"
- args = {...}
- result = ""
- if not args==2 then
- error(shell.getRunningProgram().." send/receive filename")
- end
- if args[1]=="send" then
- file = fs.open(args[2], "r")
- local rts = file.readAll()
- file.close()
- tosend = numbertoBinary(97)..toBinary(rts)..numbertoBinary(97)
- for i=1, #tosend do
- local bit = getChar(tosend, i)
- if bit=="1" then
- rs.setOutput(line, true)
- sleep(0.2)
- rs.setOutput(line, false)
- else
- sleep(0.2)
- end
- sleep(0)
- end
- else
- os.pullEvent("redstone")
- actualbit = ""
- count = 0
- resultb = ""
- started = false
- while true do
- if rs.getInput(line) then
- count = count+1
- actualbit = actualbit.."1"
- else
- count = count+1
- actualbit = actualbit.."0"
- end
- sleep(0.2)
- if count==8 then
- if actualbit==numbertoBinary(97) then
- if started then break end
- if not started then started = true end
- else
- resultb = resultb..actualbit
- end
- actualbit = ""
- count = 0
- end
- end
- actualbit = nil
- count = nil
- started = nil
- result = fromBinary(resultb)
- resultb = nil
- file = fs.open(args[2], "w")
- file.write(result)
- file.close()
- result = nil
- end
Advertisement
Add Comment
Please, Sign In to add comment