urielsalis

Untitled

Mar 31st, 2013
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.23 KB | None | 0 0
  1. function getChar(str, pos)
  2. return str:sub(pos, pos)
  3. end
  4. function numbertoBinary(dec)
  5. dec = tonumber(dec)
  6. dec=dec*2
  7. local bin=""
  8. for i=0,7 do
  9. bin=bin..tostring(math.ceil(math.floor(dec/2)%2))
  10. dec=math.floor(dec/2)
  11. end
  12. return string.reverse(bin)
  13. end
  14. function numberfromBinary(bin)
  15. return tonumber(bin, 2)
  16. end
  17. function getNumber(str)
  18. count = 0
  19. for k,v in pairs(numbers) do
  20. count = count+1
  21. if v=="str" then return count end
  22. end
  23. end
  24. function toBinary(str)
  25. bin = ""
  26. for i=1, #str do
  27. local a = getChar(str, i)
  28. if a=="\n" then a = "end of line" end
  29. local b = getNumber(a)
  30. bin = bin..numbertoBinary(b)
  31. end
  32. return bin
  33. end
  34. function fromBinary(str)
  35. count = 0
  36. temp = ""
  37. tempt = {}
  38. result = ""
  39. for i=1, #str do
  40. count = count+1
  41. temp = temp..str[i]
  42. if count==8 then
  43. table.insert(tempt, temp)
  44. temp = ""
  45. count = 0
  46. end
  47. end
  48. for i=1, #tempt do
  49. local a = numberfromBinary(tempt[i])
  50. if a=="end of line" then a = "\n" end
  51. result = result..temp
  52. end
  53. temp = nil
  54. count = nil
  55. tempt = nil
  56. return result
  57. end
  58. numbers = {}
  59. numbers["1"] = " "
  60. numbers["2"] = "!"
  61. numbers["3"] = '"'
  62. numbers["4"] = "#"
  63. numbers["5"] = "$"
  64. numbers["6"] = "%"
  65. numbers["7"] = "&"
  66. numbers["8"] = "'"
  67. numbers["9"] = "("
  68. numbers["10"] = ")"
  69. numbers["11"] = "*"
  70. numbers["12"] = "+"
  71. numbers["13"] = ","
  72. numbers["14"] = "-"
  73. numbers["15"] = "."
  74. numbers["16"] = "/"
  75. numbers["17"] = "0"
  76. numbers["18"] = "1"
  77. numbers["19"] = "2"
  78. numbers["20"] = "3"
  79. numbers["21"] = "4"
  80. numbers["22"] = "5"
  81. numbers["23"] = "6"
  82. numbers["24"] = "7"
  83. numbers["25"] = "8"
  84. numbers["26"] = "9"
  85. numbers["27"] = ":"
  86. numbers["28"] = ";"
  87. numbers["29"] = "<"
  88. numbers["30"] = "="
  89. numbers["31"] = ">"
  90. numbers["32"] = "?"
  91. numbers["33"] = "@"
  92. numbers["34"] = "A"
  93. numbers["35"] = "B"
  94. numbers["36"] = "C"
  95. numbers["37"] = "D"
  96. numbers["38"] = "E"
  97. numbers["39"] = "F"
  98. numbers["40"] = "G"
  99. numbers["41"] = "H"
  100. numbers["42"] = "I"
  101. numbers["43"] = "J"
  102. numbers["44"] = "K"
  103. numbers["45"] = "L"
  104. numbers["46"] = "M"
  105. numbers["47"] = "N"
  106. numbers["48"] = "O"
  107. numbers["49"] = "P"
  108. numbers["50"] = "Q"
  109. numbers["51"] = "R"
  110. numbers["52"] = "S"
  111. numbers["53"] = "T"
  112. numbers["54"] = "U"
  113. numbers["55"] = "V"
  114. numbers["56"] = "W"
  115. numbers["57"] = "X"
  116. numbers["58"] = "Y"
  117. numbers["59"] = "Z"
  118. numbers["60"] = "["
  119. numbers["61"] = "\\"
  120. numbers["62"] = "]"
  121. numbers["63"] = "^"
  122. numbers["64"] = "_"
  123. numbers["65"] = "`"
  124. numbers["66"] = "a"
  125. numbers["67"] = "b"
  126. numbers["68"] = "c"
  127. numbers["69"] = "d"
  128. numbers["70"] = "e"
  129. numbers["71"] = "f"
  130. numbers["72"] = "g"
  131. numbers["73"] = "h"
  132. numbers["74"] = "i"
  133. numbers["75"] = "j"
  134. numbers["76"] = "k"
  135. numbers["77"] = "l"
  136. numbers["78"] = "m"
  137. numbers["79"] = "n"
  138. numbers["80"] = "o"
  139. numbers["81"] = "p"
  140. numbers["82"] = "q"
  141. numbers["83"] = "r"
  142. numbers["84"] = "s"
  143. numbers["85"] = "t"
  144. numbers["86"] = "u"
  145. numbers["87"] = "v"
  146. numbers["88"] = "w"
  147. numbers["89"] = "x"
  148. numbers["90"] = "y"
  149. numbers["91"] = "z"
  150. numbers["92"] = "{"
  151. numbers["93"] = "|"
  152. numbers["94"] = "}"
  153. numbers["95"] = "~"
  154. numbers["96"] = "end of line"
  155. numbers["97"] = "ping"
  156. line = "back"
  157. args = {...}
  158. result = ""
  159. if not args==2 then
  160. error(shell.getRunningProgram().." send/receive filename")
  161. end
  162. if args[1]=="send" then
  163. file = fs.open(args[2], "r")
  164. local rts = file.readAll()
  165. file.close()
  166. tosend = numbertoBinary(97)..toBinary(rts)..numbertoBinary(97)
  167. for i=1, #tosend do
  168. local bit = getChar(tosend, i)
  169. if bit=="1" then
  170. rs.setOutput(line, true)
  171. sleep(0.2)
  172. rs.setOutput(line, false)
  173. else
  174. sleep(0.2)
  175. end
  176. sleep(0)
  177. end
  178. else
  179. os.pullEvent("redstone")
  180. actualbit = ""
  181. count = 0
  182. resultb = ""
  183. started = false
  184. while true do
  185. if rs.getInput(line) then
  186. count = count+1
  187. actualbit = actualbit.."1"
  188. else
  189. count = count+1
  190. actualbit = actualbit.."0"
  191. end
  192. sleep(0.2)
  193. if count==8 then
  194. if actualbit==numbertoBinary(97) then
  195. if started then break end
  196. if not started then started = true end
  197. else
  198. resultb = resultb..actualbit
  199. end
  200. actualbit = ""
  201. count = 0
  202. end
  203. end
  204. actualbit = nil
  205. count = nil
  206. started = nil
  207. result = fromBinary(resultb)
  208. resultb = nil
  209. file = fs.open(args[2], "w")
  210. file.write(result)
  211. file.close()
  212. result = nil
  213. end
Advertisement
Add Comment
Please, Sign In to add comment