Hydrotronics

Printer

Jul 6th, 2017
134
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. rednet.open("top")
  2. local queue = {}
  3. while true do
  4.   local sender, message = rednet.receive("printer")
  5.   if message == "ping" then
  6.     print("Received ping from "..sender)
  7.     rednet.send(sender,"Hydro's Office","printer")
  8.   elseif message == "print" then
  9.     print("Received print from "..sender)
  10.     while true do
  11.       local sender2, message2 = rednet.receive("printer",2)
  12.      
  13.       if sender2 == sender then
  14.         print("Executing print")
  15.         local points = {message2:find(" ")}
  16.         local words = {}
  17.         if #points == 0 then
  18.           words = {message2}
  19.         elseif #points == 1 then
  20.           words = {message2:sub(1,points[1]-1),message2:sub(points[1]+1)}
  21.         else
  22.           words = {message2:sub(1,points[1]-1)}
  23.           for i = 2,#points-1 do
  24.             table.insert(words,message2:sub(points[i]+1,points[i+1]-1))
  25.           end
  26.           table.insert(words,message2:sub(points[#points]))
  27.         end
  28.         print("Established words ("..#words.." found)")
  29.         local line = ""
  30.         local lines = {}
  31.         local pages = {}
  32.         line = words[1]
  33.         table.remove(words,1)
  34.         for each,word in pairs(words) do
  35.           if #line + #word + 1 > 25 then
  36.             if #lines > 21 then
  37.               print("New page")
  38.               table.insert(pages,lines)
  39.               lines = {line}
  40.               line = word
  41.             else
  42.               print("New line")
  43.               table.insert(lines,line)
  44.               line = word
  45.             end
  46.           else
  47.             line = line.." "..word
  48.           end
  49.         end
  50.         table.insert(lines,line)
  51.         table.insert(pages,lines)
  52.         print("Constructed Pages")
  53.         local printer = peripheral.wrap("left")
  54.         if printer.getInkLevel() < #pages then
  55.           rednet.send(sender,"ink","printer")
  56.           print("Not enough ink")
  57.         elseif printer.getPaperLevel() < #pages then
  58.           rednet.send(sender,"paper","printer")
  59.           print("Not enough paper")
  60.         else
  61.           print("Has sufficient resources")
  62.           print("Todo: "..#pages.." pages")
  63.           for each,page in pairs(pages) do
  64.             print("Starting page "..each.."/"..#pages)
  65.             printer.newPage()
  66.             for any,line in pairs(page) do
  67.               printer.write(line.."\n")
  68.             end
  69.             printer.endPage()
  70.             print("Print finished")
  71.           end
  72.         end
  73.         break
  74.       else
  75.         local tab = {sender2,message2}
  76.         table.insert(queue,tab)
  77.       end
  78.     end
  79.   end
  80. end
Add Comment
Please, Sign In to add comment