Advertisement
Ewgeniy

Yo

Sep 4th, 2021
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 10.99 KB | None | 0 0
  1. local component = require("component")
  2. local term = require("term")
  3. local computer = require("computer")
  4. local k = require("keyboard")
  5. local shell = require("shell")
  6. local sides = require("sides")
  7. local filesystem = require("filesystem")
  8. local rs = component.redstone
  9.  
  10. local td = component.tape_drive
  11. local g = component.gpu
  12.  
  13. local function c(x)
  14.     return tonumber(x:sub(2), 16)
  15. end
  16. function sb(BGC)
  17.     g.setBackground(BGC)
  18. end
  19. function sf(FGC)
  20.     g.setForeground(FGC)
  21. end
  22.  
  23. jjs = 0
  24.  
  25. term.clear()
  26. X1,Y1 = g.maxResolution()
  27. X = (X1/2)+1 Y = (Y1/2)+1
  28. g.setResolution(X1/2,Y1/2)
  29. sf(c("#55FF88"))
  30. sb(c("#000000"))
  31.  
  32. term.setCursor(3,2)
  33. term.write("Hello! please insert a cassette tape..")
  34.  
  35. repeat
  36.     tapeready = td.isReady()
  37.     os.sleep(0.25)
  38. until tapeready
  39. repeat
  40.    
  41.     reloadtape = false
  42.     toggleloop = false
  43.     readfail = 0
  44.     tapesize2 = 0
  45.     tapesize3 = 0
  46.     tapesize4 = 0
  47.     tapesize5 = 0
  48.     tapesize6 = 0
  49.     term.setCursorBlink(false)
  50.  
  51.     term.clear()
  52.     td.stop()
  53.     X1,Y1 = g.maxResolution()
  54.     X = (X1/2)+1 Y = (Y1/2)+1
  55.     g.setResolution(X1/2,Y1/2)
  56.     sf(c("#55FF88"))
  57.     sb(c("#000000"))
  58.  
  59.     tapelabel = td.getLabel()
  60.     tapesize = td.getSize()
  61.     td.seek(-tapesize)
  62.     tapelength = td.seek(tapesize)
  63.     term.clear()
  64.     repeat
  65.         td.seek(-(8192*3))
  66.         tapesize2 = tapesize2 + (8192*3)
  67.         read = td.read()
  68.         if read > 0 then
  69.             readfail = readfail+1
  70.         end
  71.         term.clear()
  72.         term.setCursor(0,0)
  73.         print(tapesize2,"/",tapesize,read)
  74.     until readfail > 0 or tapesize2 > tapesize
  75.  
  76.     td.seek(tapesize)
  77.     td.seek(-(tapesize2-(8192*3)))
  78.     readfail = 0
  79.     term.clear()
  80.     repeat
  81.         td.seek(-512)
  82.         tapesize3 = tapesize3 + 512
  83.         read = td.read()
  84.         if read > 0 then
  85.             readfail = readfail+1
  86.         end
  87.         term.clear()
  88.         term.setCursor(0,0)
  89.         print(tapesize3,"/",tapesize,read)
  90.     until readfail > 0 or tapesize3 > tapesize
  91.  
  92.     td.seek(tapesize)
  93.     td.seek(-(tapesize2-(8192*3)))
  94.     td.seek(-(tapesize3-512))
  95.     readfail = 0
  96.     term.clear()
  97.     repeat
  98.         td.seek(-4)
  99.         tapesize4 = tapesize4 + 4
  100.         read = td.read()
  101.         if read > 0 then
  102.             readfail = readfail+1
  103.         end
  104.         term.clear()
  105.         term.setCursor(0,0)
  106.         print(tapesize4,"/",tapesize,read)
  107.     until readfail > 0 or tapesize4 > tapesize
  108.     if not filesystem.exists("/home/darkconfig.txt") then
  109.         darkconfig = io.open("/home/darkconfig.txt", "w")
  110.         darkconfig:write(tostring(false))
  111.         darkconfig:close()
  112.     end
  113.     tapesizeF = tapesize-((((tapesize2-tapesize3)-tapesize4)-tapesize5)-tapesize6)
  114.     darkconfig1 = io.open("/home/darkconfig.txt", "r")
  115.     toggledark1 = darkconfig1:read("*a")
  116.     if toggledark1 == "true" then
  117.         toggledark = true
  118.     else
  119.         toggledark = false
  120.     end
  121.     darkconfig1:close()
  122.  
  123.     if toggledark then
  124.         wbox = c("#444444")
  125.         wtitle = c("#333333")
  126.         wline = c("#25b2f8")
  127.         wred = c("#FF4444")
  128.         wtext1 = c("#AAAAAA")
  129.         wtext2 = c("#DDDDDD")
  130.         wtext3 = c("#EEEEEE")
  131.         wblue = c("#7070e1")
  132.         wblue1 = c("#9292e2")
  133.     else
  134.         wbox = c("#efeff1")
  135.         wtitle = c("#dedee3")
  136.         wline = c("#bababf")
  137.         wred = c("#FF0000")
  138.         wtext1 = c("#555555")
  139.         wtext2 = c("#888888")
  140.         wtext3 = c("#AAAAAA")
  141.         wblue = c("#7070e1")
  142.         wblue1 = c("#9292e2")
  143.     end
  144.  
  145.     if tapesizeF > tapesize-(tapesize/64) then
  146.         wtitle = c("#e3cece")
  147.     end
  148.  
  149.     sb(wbox)
  150.     g.fill(0,0,X,Y," ")
  151.     sb(wtitle)
  152.     g.fill(0,0,X,4," ")
  153.     sf(wline)
  154.     g.fill(0,3,X,1,"_")
  155.  
  156.     sf(wred)
  157.     term.setCursor(X-3,2)
  158.     term.write("X")
  159.     term.setCursor(3,2)
  160.     sf(wblue1)
  161.     term.write("●JJS-Tech Tape Player●")
  162.  
  163.     sb(wbox)
  164.     term.setCursor(4,5)
  165.     sf(wblue)
  166.     term.write("●───╢ ")
  167.     sf(wtext2)
  168.     term.write("Tape Title: ")
  169.     sf(wtext1)
  170.     term.write(tapelabel)
  171.     sf(wblue)
  172.     term.write(" ╟───●")
  173.  
  174.     term.setCursor(5,7)
  175.     sf(wblue1)
  176.     term.write("● ")
  177.     sf(wtext3)
  178.     term.write("Tape Data: ")
  179.     sf(wtext2)
  180.     term.write(tapesizeF)
  181.     term.write(" / ")
  182.     term.write(tapesize)
  183.  
  184.     XT, YT = term.getCursor()
  185.     sb(c("#8aeb75"))
  186.     sf(c("#b3eda6"))
  187.     g.fill(XT+5,YT, 37, 1,"═")
  188.  
  189.     tapelength1 = tapesizeF/tapesize
  190.  
  191.     sb(c("#eb7575"))
  192.     sf(c("#eda6a6"))
  193.  
  194.     g.fill(XT+5,YT, 37*tapelength1, 1,"═")
  195.  
  196.     term.setCursor((XT+5)+37*tapelength1,YT)
  197.     term.write("]")
  198.     sb(c("#8aeb75"))
  199.     sf(c("#b3eda6"))
  200.     term.write("[")
  201.  
  202.     sb(wbox)
  203.     sf(wtext3)
  204.  
  205.     XT, YT = term.getCursor()
  206.     term.setCursor(XT-2,YT-1)
  207.     term.write(string.format("%.0f", tapelength1*100))
  208.     term.write("%")
  209.  
  210.     td.seek(-tapelength)
  211.  
  212.     term.setCursor(5,8)
  213.     sf(wblue1)
  214.     term.write("● ")
  215.     sf(wtext3)
  216.     term.write("Play Speed: ")
  217.     sf(wred)
  218.     term.write("Input number between 0.1 and 2: ")
  219.     playspeed = term.read()
  220.     g.fill(18,8,X1,1, " ")
  221.     td.setSpeed(tonumber(playspeed))
  222.  
  223.     term.setCursor(19,8)
  224.     sf(wtext2)
  225.     term.write(tonumber(playspeed))
  226.  
  227.     term.setCursor(4,16)
  228.     sf(wblue)
  229.     term.write("●───╢ ")
  230.     sf(wtext2)
  231.     term.write("Tape Status: ")
  232.     term.write("          ")
  233.     sf(wtext3)
  234.     term.setCursor(5,24)
  235.     term.write("L = Loop, P = Play, S = Stop, R = Rewind, T = Change Label, ")
  236.     sf(c("#ff8a8a"))
  237.     term.write("Q = Quit")
  238.     td.play()
  239.     i = 1
  240.     repeat
  241.         sb(wbox)
  242.         tapepos1 = td.getPosition() / tapesizeF
  243.         state = td.getState()
  244.         term.setCursor(23,16)
  245.         sf(wtext1)
  246.         term.write(state)
  247.         sf(wblue)
  248.         term.write(" ╟───●     ")
  249.  
  250.         term.setCursor(5,18)
  251.         sf(wblue1)
  252.         term.write("● ")
  253.         sf(wtext3)
  254.         term.write("Time: ")
  255.         readtime = (tapesizeF / (48000*playspeed))*8
  256.         fulltime = (tapelength / (48000*playspeed))*8
  257.         readedtime = readtime*tapepos1
  258.         sf(wtext2)
  259.         term.write(string.format("%.0f", readedtime))
  260.         term.write(" / ")
  261.         term.write(string.format("%.0f", readtime))
  262.         term.write("s     ")
  263.  
  264.         term.setCursor(5,19)
  265.         sf(wblue1)
  266.         term.write("● ")
  267.         sf(wtext3)
  268.         term.write("Total tape time: ")
  269.         sf(wtext2)
  270.         term.write(string.format("%.0fs", fulltime))
  271.         sf(wtext3)
  272.         term.write(" (Includes empty end section.)")
  273.  
  274.         term.setCursor(5,21)
  275.         sf(wblue1)
  276.         term.write("●─╢")
  277.         sb(c("#5c5c5c"))
  278.         sf(c("#828282"))
  279.         g.fill(8,21,66,1, "─")
  280.         term.setCursor(9+(66*tapepos1),21)
  281.         term.write("[")
  282.         term.setCursor(74,21)
  283.         sf(wblue1)
  284.         sb(wbox)
  285.         term.write("╟─●")
  286.         sb(c("#8aeb75"))
  287.         sf(c("#b3eda6"))
  288.         g.fill(8,21,66*tapepos1,1, "─")
  289.         term.setCursor(8+(66*tapepos1),21)
  290.         term.write("]")
  291.  
  292.         local keyloop = k.isKeyDown("l")
  293.         if toggleloop == nil then toggleloop = false end -- safety check
  294.  
  295.         if keyloop and not t then
  296.             toggleloop = not toggleloop
  297.         end
  298.         t = keyloop
  299.  
  300.         local keystop = k.isKeyDown("s")
  301.  
  302.         if keystop and not t1 then
  303.             td.stop()
  304.         end
  305.         t1 = keystop
  306.  
  307.         local keyplay = k.isKeyDown("p")
  308.  
  309.         if keyplay and not t2 then
  310.             td.play()
  311.         end
  312.         t2 = keyplay
  313.  
  314.         local keyrewind = k.isKeyDown("r")
  315.  
  316.         if keyrewind and not t3 then
  317.             td.seek(-tapelength)
  318.         end
  319.         t3 = keyrewind
  320.  
  321.         local keyquit = k.isKeyDown("q")
  322.  
  323.         if keyquit and not t4 then
  324.             computer.beep(200,0.5)
  325.             os.sleep(0.5)
  326.             jjs = 1
  327.             td.stop()
  328.             td.seek(-tapelength)
  329.             break
  330.         end
  331.         t4 = keyquit
  332.  
  333.         local keylabel = k.isKeyDown("t")
  334.  
  335.         if keylabel and not t5 then
  336.             computer.beep(500,0.25)
  337.             os.sleep(0.5)
  338.             term.setCursorBlink(true)
  339.             sb(wbox)
  340.             term.setCursor(4,5)
  341.             sf(wblue)
  342.             term.write("●───╢ ")
  343.             sf(wtext2)
  344.             term.write("Tape Title: ")
  345.             g.fill(22,5,80,1, " ")
  346.             sf(wtext1)
  347.             newtapelabel = term.read()
  348.             newtapelabel1 = string.sub(newtapelabel, 1, string.len(newtapelabel)-1)
  349.             td.setLabel(newtapelabel1)
  350.             break
  351.         end
  352.         t5 = keylabel
  353.  
  354.         local keydark = k.isKeyDown("d")
  355.         if toggledark == nil then toggledark = false end -- safety check
  356.  
  357.         if keydark and not t6 then
  358.             if keydark and not t then
  359.                 darkconfig1 = io.open("/home/darkconfig.txt", "r")
  360.                 toggledark1 = darkconfig1:read("*a")
  361.                 if toggledark1 == "true" then
  362.                     toggledark = true
  363.                 else
  364.                     toggledark = false
  365.                 end
  366.                 toggledark = not toggledark
  367.                 if filesystem.exists("/home/darkconfig.txt") then
  368.                     filesystem.remove("/home/darkconfig.txt")
  369.                 end
  370.                 darkconfig = io.open("/home/darkconfig.txt", "w")
  371.                 darkconfig:write(tostring(toggledark))
  372.                 darkconfig:close()
  373.                 darkconfig2 = io.open("/home/darkconfig.txt", "r")
  374.                 print(darkconfig2:read("*a"))
  375.                 break
  376.             end
  377.         end
  378.         t6 = keydark
  379.        
  380.         if not td.isReady() then
  381.             os.sleep(1)
  382.             reloadtape = true
  383.             computer.beep(300,0.1)
  384.             sb(wbox)
  385.             sf(wred)
  386.             term.setCursor(5,10)
  387.             term.write("Please insert cassette tape!")  
  388.             term.setCursor(5,11)
  389.             term.write("Please insert cassette tape!")
  390.             term.setCursor(5,12)
  391.             term.write("Please insert cassette tape!")
  392.             term.setCursor(5,13)
  393.             term.write("Please insert cassette tape!")
  394.             term.setCursor(5,14)
  395.             term.write("Please insert cassette tape!")
  396.         end
  397.         if reloadtape then
  398.             os.sleep(1)
  399.             if td.isReady() and reloadtape then
  400.                 break
  401.             end
  402.         end
  403.  
  404.  
  405.         if td.getPosition() > tapesizeF then
  406.             if toggleloop then
  407.                 td.stop()
  408.                 td.seek(-tapelength)
  409.                 os.sleep(0.5)
  410.                 td.play()
  411.             else
  412.                 td.stop()
  413.             end
  414.         end
  415.  
  416.         if toggleloop then
  417.             sf(wblue)
  418.         else
  419.             sf(wred)
  420.         end
  421.         sb(wbox)
  422.         term.setCursor(9,24)
  423.         term.write("Loop")
  424.  
  425.  
  426.  
  427.  
  428.         os.sleep(0.25)
  429.     until i == 0
  430. until jjs == 1
  431.  
  432. sb(c("#000000"))
  433. sf(c("#FFFFFF"))
  434. term.clear()
  435. term.setCursor(0,0)
  436. shell.execute("reboot")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement