Advertisement
AlexMastang

Printer (CC)

Oct 7th, 2024
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.22 KB | Source Code | 0 0
  1. local printer = peripheral.find("printer")
  2.  
  3. local path = ""
  4. local c = 0
  5. local x, y, X, Y
  6. local w, h
  7. local esito = true
  8. local linee = {}
  9. local tot = 0
  10. local pag = 0
  11. local l_max = 0
  12.  
  13.  
  14. local function file_ex(file)
  15.     local f = io.open(file, "rb")
  16.     if (f) then f:close() end
  17.     return f ~= nil
  18. end
  19.  
  20. local function pag_n()
  21.     if (not printer.newPage()) then
  22.         error("Cacatum errorum: Hai cacato la carta e l'inchiostro?")
  23.     end
  24. end
  25.  
  26. local function pag_c()
  27.     if (not printer.endPage()) then
  28.         error("Escretatum errorum: Impossibile stampare")
  29.     end
  30. end
  31.  
  32.  
  33. x, y = term.getCursorPos()
  34. w, h = term.getSize()
  35. repeat
  36.     term.setCursorPos(x, y)
  37.     for i=1,w,1 do
  38.         write(" ")
  39.     end
  40.    
  41.     term.setCursorPos(x, y)
  42.     write("> Percorso del file: ")
  43.     path = read()
  44.     if (file_ex(path)) then
  45.         esito = true
  46.     else
  47.         esito = false
  48.         c = c + 1
  49.         print(("> Diarrea errorum (%d): Il file non esiste"):format(c))
  50.     end
  51. until (esito)
  52. print()
  53.  
  54. for linea in io.lines(path) do
  55.     linee[#linee+1] = linea
  56.     if (string.len(linea) > l_max) then
  57.         l_max = string.len(linea)
  58.     end
  59. end
  60.  
  61. pag_n()
  62. w, h = printer.getPageSize()
  63. write("> ")
  64. if (l_max > w) then
  65.     term.setTextColor(colors.red)
  66.     print("(ATTENZIONE: La formattazione del file supera il bordo. Cio' potrebbe comportare artefatti)")
  67.     term.setTextColor(colors.white)
  68.     write("Annullare la stampa (y/n)?: ")
  69.     if (read() ~= "n") then
  70.         exit(1)
  71.     end
  72. end
  73. print("> Stampando...")
  74.  
  75. printer.setPageTitle("Pag 1")
  76. tot = math.ceil(#linee/h)
  77. print("> Pagine da stampare:", tot)
  78. X, Y = term.getCursorPos()
  79. for i=1,#linee,1 do
  80.     pag = math.ceil(i/h)
  81.     term.setCursorPos(X, Y)
  82.     print(("> Pag %d/%d | %5.1f%s"):format(pag, tot, (i%h)/((pag~=tot) and h or #linee%h)*100, "%"))
  83.    
  84.     x, y = printer.getCursorPos()
  85.     printer.write(linee[i])
  86.     printer.setCursorPos(0, y+1)
  87.     if (i%h == 0) then
  88.         pag_c()
  89.         pag_n()
  90.         printer.setPageTitle("Pag " .. pag+1)
  91.     end
  92.    
  93.     os.sleep(0.01)
  94. end
  95. pag_c()
  96.  
  97. write("> ")
  98. term.setTextColor(colors.lime)
  99. print("Finito")
  100. term.setTextColor(colors.white)
  101. print("\n> Enter per chiudere")
  102. read()
  103.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement