diff --git a/BlahOS-Install.lua b/BlahOS-Install.lua new file mode 100644 index 0000000..d7e8544 --- /dev/null +++ b/BlahOS-Install.lua @@ -0,0 +1,1488 @@ +local tArg = {...} +local outputPath, file = tArg[1] and fs.combine(shell.dir(), tArg[1]) or / +local safeColorList = {[colors.white] = true,[colors.lightGray] = true,[colors.gray] = true,[colors.black] = true} +local stc = function(color) if (term.isColor() or safeColorList[color]) then term.setTextColor(color) end end +local archive = textutils.unserialize("{\ + mainFile = false,\ + compressed = false,\ + data = {\ + [ \"BlahOS/screen.lua\" ] = \"sizeX, sizeY = term.getSize()\\\ +printArray = {}\\\ +frame = 0\\\ +fps = 0\\\ +drawFps = false\\\ +currentKey = 0\\\ +drawBaseX = 1\\\ +drawBaseY = 1\\\ +maxDrawX = sizeX - drawBaseX - 1\\\ +maxDrawY = sizeY - drawBaseY - 2\\\ +\\\ +--Toolbar vars\\\ +local toolbarTextLeft = {}\\\ +toolbarTextLeft[1] = \\\"Rename\\\"\\\ +toolbarTextLeft[2] = \\\"Cut\\\"\\\ +toolbarTextLeft[3] = \\\"Copy\\\"\\\ +toolbarTextLeft[4] = \\\"Paste\\\"\\\ +toolbarTextLeft[5] = \\\"MkDir\\\"\\\ +toolbarTextLeft[6] = \\\"Delete\\\"\\\ +\\\ +local toolbarTextRight = {}\\\ +toolbarTextRight[1] = \\\"Edit\\\"\\\ +toolbarTextRight[2] = \\\"Rename\\\"\\\ +toolbarTextRight[3] = \\\"Cut\\\"\\\ +toolbarTextRight[4] = \\\"Copy\\\"\\\ +toolbarTextRight[5] = \\\"Paste\\\"\\\ +toolbarTextRight[6] = \\\"MkFile\\\"\\\ +toolbarTextRight[7] = \\\"Delete\\\"\\\ +\\\ +displaytext = function()\\\ + for dlx = 1, maxDrawX do\\\ + for dly = 1, maxDrawY do\\\ + term.setCursorPos(dlx + drawBaseX,dly + drawBaseX)\\\ + local v = printArray[dlx..\\\",\\\"..dly]\\\ + if v ~= nil then\\\ + term.write(v)\\\ + end\\\ + end\\\ + end\\\ +end\\\ +\\\ +reload = function()\\\ + selectedTb = 0\\\ + --main.overrideKey = keys[\\\"up\\\"]\\\ + screen.clear()\\\ + currentDir = dir\\\ + selectorRow = 1\\\ + selectorCoulum = True\\\ + main.drawMenu()\\\ + main.drawCursor()\\\ +end\\\ +\\\ +clear = function()\\\ + for cx = 1, maxDrawX do\\\ + for cy = 1, maxDrawY do\\\ + printArray[cx..\\\",\\\"..cy] = \\\"\\\"\\\ + end\\\ + end\\\ +end\\\ +\\\ +printToScreen = function(_x,_y,a)\\\ + local x, y = math.floor(_x), math.floor(_y)\\\ + if x <= maxDrawX and y <= maxDrawY then\\\ + printArray[x..\\\",\\\"..y] = a\\\ + end\\\ +end\\\ +\\\ +border = function(b)\\\ + term.write(\\\"+\\\")\\\ + term.write(string.rep(\\\"-\\\", sizeX-2))\\\ + term.write(\\\"+\\\")\\\ + for i = 1, sizeY-1 do\\\ + term.write(\\\"|\\\")\\\ + for k = 2, sizeX-1 do\\\ + term.write(\\\" \\\")\\\ + end\\\ + term.write(\\\"|\\\")\\\ + term.setCursorPos(1,i+1)\\\ + end\\\ + term.write(\\\"+\\\")\\\ + term.write(string.rep(\\\"-\\\", sizeX-2))\\\ + term.write(\\\"+\\\")\\\ +\\\ + if b then\\\ + for sbl = 2, sizeX - 1 do\\\ + term.setCursorPos(sbl, 3)\\\ + term.write(\\\"-\\\")\\\ + end\\\ + term.setCursorPos(1, 3)\\\ + term.write(\\\"+\\\")\\\ + term.setCursorPos(sizeX, 3)\\\ + term.write(\\\"+\\\")\\\ + end\\\ +\\\ + term.setCursorPos(screen.sizeX - 6, 1)\\\ + term.write(\\\"-\\\")\\\ +\\\ + term.setCursorPos(2, 2)\\\ +end\\\ +\\\ +drawToolbar = function(b, selected)\\\ + tbText = \\\"\\\"\\\ +\\\ + if not b then\\\ + dtbll = table.getn(toolbarTextRight)\\\ +\\\ + for dtbl = 1, dtbll do\\\ + if dtbl == selected then\\\ + tbText = tbText..\\\"=\\\"..toolbarTextRight[dtbl]..\\\"=\\\"\\\ + else\\\ + tbText = tbText..\\\"[\\\"..toolbarTextRight[dtbl]..\\\"]\\\"\\\ + end\\\ + end\\\ + else\\\ + dtbll = table.getn(toolbarTextLeft)\\\ +\\\ + for dtbl = 1, dtbll do\\\ + if dtbl == selected then\\\ + tbText = tbText..\\\"=\\\"..toolbarTextLeft[dtbl]..\\\"=\\\"\\\ + else\\\ + tbText = tbText..\\\"[\\\"..toolbarTextLeft[dtbl]..\\\"]\\\"\\\ + end\\\ + end\\\ + end\\\ +\\\ + term.setCursorPos(1, sizeY - 2)\\\ + term.write(\\\"+\\\")\\\ + term.setCursorPos(sizeX, sizeY - 2)\\\ + term.write(\\\"+\\\")\\\ +\\\ + for dtbl = 2, sizeX - 1 do\\\ + term.setCursorPos(dtbl, sizeY - 2)\\\ + term.write(\\\"-\\\")\\\ + end\\\ +\\\ + term.setCursorPos(2, sizeY - 1)\\\ + term.write(tbText)\\\ +\\\ +end\\\ +\\\ +drawInputField = function()\\\ + local offsetX = 4\\\ + for i = offsetX, sizeX - offsetX do\\\ + printToScreen(i, sizeY / 3, \\\" \\\")\\\ + printToScreen(i, sizeY / 3 + 1, \\\"-\\\")\\\ + printToScreen(i, sizeY / 3 - 1, \\\"-\\\")\\\ + end\\\ + printToScreen(offsetX, sizeY / 3 - 1, \\\"+\\\")\\\ + printToScreen(offsetX, sizeY / 3 + 1, \\\"+\\\")\\\ + printToScreen(sizeX - offsetX, sizeY / 3 - 1, \\\"+\\\")\\\ + printToScreen(sizeX - offsetX, sizeY / 3 + 1, \\\"+\\\")\\\ + printToScreen(offsetX, sizeY / 3, \\\"|\\\")\\\ + printToScreen(sizeX - offsetX, sizeY / 3, \\\"|\\\")\\\ +\\\ + displaytext()\\\ +\\\ + term.setCursorPos(offsetX + 2, sizeY / 3 + 1)\\\ + return read()\\\ +end\\\ +\\\ +clock = function()\\\ + term.setCursorPos(sizeX - 6, 1)\\\ + term.write(\\\"+\\\")\\\ + term.setCursorPos(sizeX - 6, 3)\\\ + term.write(\\\"+\\\")\\\ + term.setCursorPos(sizeX - 6, 2)\\\ + local time = os.time()\\\ + if drawFps then\\\ + term.write(formatTime(time)..\\\" FPS: \\\"..fps)\\\ + else\\\ + term.write(\\\"|\\\"..formatTime(time))\\\ + end\\\ +end\\\ +\\\ +getKeyPressed = function()\\\ + local key = currentKey\\\ + currentKey = 0\\\ + return key\\\ +end\\\ +\\\ +formatTime = function(nTime)\\\ + local nHour = math.floor(nTime)\\\ + local nMinute = math.floor((nTime - nHour)*60)\\\ + return string.format(\\\"%02d:%02d\\\", nHour, nMinute)\\\ +end\\\ +\\\ +setKey = function(k)\\\ + currentKey = k\\\ +end\\\ +\\\ +writeToPos = function(x,y,s)\\\ + term.setCursorPos(x,y)\\\ + term.write(s)\\\ +end\\\ +\\\ +displayMessage = function(m,t)\\\ + local offsetX = (sizeX - (string.len(m) + 2)) / 2\\\ + for i = offsetX, sizeX - offsetX do\\\ + printToScreen(i, sizeY / 3, \\\"\\\")\\\ + printToScreen(i, sizeY / 3 + 1, \\\"-\\\")\\\ + printToScreen(i, sizeY / 3 - 1, \\\"-\\\")\\\ + end\\\ + printToScreen(offsetX, sizeY / 3 - 1, \\\"+\\\")\\\ + printToScreen(offsetX, sizeY / 3 + 1, \\\"+\\\")\\\ + printToScreen(sizeX - offsetX, sizeY / 3 - 1, \\\"+\\\")\\\ + printToScreen(sizeX - offsetX, sizeY / 3 + 1, \\\"+\\\")\\\ + printToScreen(offsetX, sizeY / 3, \\\"|\\\")\\\ + printToScreen(sizeX - offsetX, sizeY / 3, \\\"|\\\")\\\ + printToScreen(offsetX + 1, sizeY / 3, m)\\\ +\\\ + displaytext()\\\ + local timer = os.startTimer(math.max(0, t - 0.05))\\\ + local evt, k\\\ + sleep(0.05)\\\ + while true do\\\ + evt, k = os.pullEvent()\\\ + if evt == \\\"timer\\\" and k == timer then\\\ + break\\\ + elseif evt == \\\"key\\\" then\\\ + break\\\ + end\\\ + end\\\ + clear()\\\ +end\",\ + [ \"BlahOS/screen\" ] = \"sizeX, sizeY = term.getSize()\\\ +printArray = {}\\\ +frame = 0\\\ +fps = 0\\\ +drawFps = false\\\ +currentKey = 0\\\ +drawBaseX = 1\\\ +drawBaseY = 1\\\ +maxDrawX = sizeX - drawBaseX - 1\\\ +maxDrawY = sizeY - drawBaseY - 2\\\ +\\\ +--Toolbar vars\\\ +local toolbarTextLeft = {}\\\ +toolbarTextLeft[1] = \\\"Rename\\\"\\\ +toolbarTextLeft[2] = \\\"Cut\\\"\\\ +toolbarTextLeft[3] = \\\"Copy\\\"\\\ +toolbarTextLeft[4] = \\\"Paste\\\"\\\ +toolbarTextLeft[5] = \\\"MkDir\\\"\\\ +toolbarTextLeft[6] = \\\"Delete\\\"\\\ +\\\ +local toolbarTextRight = {}\\\ +toolbarTextRight[1] = \\\"Edit\\\"\\\ +toolbarTextRight[2] = \\\"Rename\\\"\\\ +toolbarTextRight[3] = \\\"Cut\\\"\\\ +toolbarTextRight[4] = \\\"Copy\\\"\\\ +toolbarTextRight[5] = \\\"Paste\\\"\\\ +toolbarTextRight[6] = \\\"MkFile\\\"\\\ +toolbarTextRight[7] = \\\"Delete\\\"\\\ +\\\ +displaytext = function()\\\ + for dlx = 1, maxDrawX do\\\ + for dly = 1, maxDrawY do\\\ + term.setCursorPos(dlx + drawBaseX,dly + drawBaseX)\\\ + local v = printArray[dlx..\\\",\\\"..dly]\\\ + if v ~= nil then\\\ + term.write(v)\\\ + end\\\ + end\\\ + end\\\ +end\\\ +\\\ +reload = function()\\\ + selectedTb = 0\\\ + --main.overrideKey = keys[\\\"up\\\"]\\\ + screen.clear()\\\ + currentDir = dir\\\ + selectorRow = 1\\\ + selectorCoulum = True\\\ + main.drawMenu()\\\ + main.drawCursor()\\\ +end\\\ +\\\ +clear = function()\\\ + for cx = 1, maxDrawX do\\\ + for cy = 1, maxDrawY do\\\ + printArray[cx..\\\",\\\"..cy] = \\\"\\\"\\\ + end\\\ + end\\\ +end\\\ +\\\ +printToScreen = function(_x,_y,a)\\\ + local x, y = math.floor(_x), math.floor(_y)\\\ + if x <= maxDrawX and y <= maxDrawY then\\\ + printArray[x..\\\",\\\"..y] = a\\\ + end\\\ +end\\\ +\\\ +border = function(b)\\\ + term.write(\\\"+\\\")\\\ + term.write(string.rep(\\\"-\\\", sizeX-2))\\\ + term.write(\\\"+\\\")\\\ + for i = 1, sizeY-1 do\\\ + term.write(\\\"|\\\")\\\ + for k = 2, sizeX-1 do\\\ + term.write(\\\" \\\")\\\ + end\\\ + term.write(\\\"|\\\")\\\ + term.setCursorPos(1,i+1)\\\ + end\\\ + term.write(\\\"+\\\")\\\ + term.write(string.rep(\\\"-\\\", sizeX-2))\\\ + term.write(\\\"+\\\")\\\ +\\\ + if b then\\\ + for sbl = 2, sizeX - 1 do\\\ + term.setCursorPos(sbl, 3)\\\ + term.write(\\\"-\\\")\\\ + end\\\ + term.setCursorPos(1, 3)\\\ + term.write(\\\"+\\\")\\\ + term.setCursorPos(sizeX, 3)\\\ + term.write(\\\"+\\\")\\\ + end\\\ +\\\ + term.setCursorPos(screen.sizeX - 6, 1)\\\ + term.write(\\\"-\\\")\\\ +\\\ + term.setCursorPos(2, 2)\\\ +end\\\ +\\\ +drawToolbar = function(b, selected)\\\ + tbText = \\\"\\\"\\\ +\\\ + if not b then\\\ + dtbll = table.getn(toolbarTextRight)\\\ +\\\ + for dtbl = 1, dtbll do\\\ + if dtbl == selected then\\\ + tbText = tbText..\\\"=\\\"..toolbarTextRight[dtbl]..\\\"=\\\"\\\ + else\\\ + tbText = tbText..\\\"[\\\"..toolbarTextRight[dtbl]..\\\"]\\\"\\\ + end\\\ + end\\\ + else\\\ + dtbll = table.getn(toolbarTextLeft)\\\ +\\\ + for dtbl = 1, dtbll do\\\ + if dtbl == selected then\\\ + tbText = tbText..\\\"=\\\"..toolbarTextLeft[dtbl]..\\\"=\\\"\\\ + else\\\ + tbText = tbText..\\\"[\\\"..toolbarTextLeft[dtbl]..\\\"]\\\"\\\ + end\\\ + end\\\ + end\\\ +\\\ + term.setCursorPos(1, sizeY - 2)\\\ + term.write(\\\"+\\\")\\\ + term.setCursorPos(sizeX, sizeY - 2)\\\ + term.write(\\\"+\\\")\\\ +\\\ + for dtbl = 2, sizeX - 1 do\\\ + term.setCursorPos(dtbl, sizeY - 2)\\\ + term.write(\\\"-\\\")\\\ + end\\\ +\\\ + term.setCursorPos(2, sizeY - 1)\\\ + term.write(tbText)\\\ +\\\ +end\\\ +\\\ +drawInputField = function()\\\ + local offsetX = 4\\\ + for i = offsetX, sizeX - offsetX do\\\ + printToScreen(i, sizeY / 3, \\\" \\\")\\\ + printToScreen(i, sizeY / 3 + 1, \\\"-\\\")\\\ + printToScreen(i, sizeY / 3 - 1, \\\"-\\\")\\\ + end\\\ + printToScreen(offsetX, sizeY / 3 - 1, \\\"+\\\")\\\ + printToScreen(offsetX, sizeY / 3 + 1, \\\"+\\\")\\\ + printToScreen(sizeX - offsetX, sizeY / 3 - 1, \\\"+\\\")\\\ + printToScreen(sizeX - offsetX, sizeY / 3 + 1, \\\"+\\\")\\\ + printToScreen(offsetX, sizeY / 3, \\\"|\\\")\\\ + printToScreen(sizeX - offsetX, sizeY / 3, \\\"|\\\")\\\ +\\\ + displaytext()\\\ +\\\ + term.setCursorPos(offsetX + 2, sizeY / 3 + 1)\\\ + return read()\\\ +end\\\ +\\\ +clock = function()\\\ + term.setCursorPos(sizeX - 6, 1)\\\ + term.write(\\\"+\\\")\\\ + term.setCursorPos(sizeX - 6, 3)\\\ + term.write(\\\"+\\\")\\\ + term.setCursorPos(sizeX - 6, 2)\\\ + local time = os.time()\\\ + if drawFps then\\\ + term.write(formatTime(time)..\\\" FPS: \\\"..fps)\\\ + else\\\ + term.write(\\\"|\\\"..formatTime(time))\\\ + end\\\ +end\\\ +\\\ +getKeyPressed = function()\\\ + local key = currentKey\\\ + currentKey = 0\\\ + return key\\\ +end\\\ +\\\ +formatTime = function(nTime)\\\ + local nHour = math.floor(nTime)\\\ + local nMinute = math.floor((nTime - nHour)*60)\\\ + return string.format(\\\"%02d:%02d\\\", nHour, nMinute)\\\ +end\\\ +\\\ +setKey = function(k)\\\ + currentKey = k\\\ +end\\\ +\\\ +writeToPos = function(x,y,s)\\\ + term.setCursorPos(x,y)\\\ + term.write(s)\\\ +end\\\ +\\\ +displayMessage = function(m,t)\\\ + local offsetX = (sizeX - (string.len(m) + 2)) / 2\\\ + for i = offsetX, sizeX - offsetX do\\\ + printToScreen(i, sizeY / 3, \\\"\\\")\\\ + printToScreen(i, sizeY / 3 + 1, \\\"-\\\")\\\ + printToScreen(i, sizeY / 3 - 1, \\\"-\\\")\\\ + end\\\ + printToScreen(offsetX, sizeY / 3 - 1, \\\"+\\\")\\\ + printToScreen(offsetX, sizeY / 3 + 1, \\\"+\\\")\\\ + printToScreen(sizeX - offsetX, sizeY / 3 - 1, \\\"+\\\")\\\ + printToScreen(sizeX - offsetX, sizeY / 3 + 1, \\\"+\\\")\\\ + printToScreen(offsetX, sizeY / 3, \\\"|\\\")\\\ + printToScreen(sizeX - offsetX, sizeY / 3, \\\"|\\\")\\\ + printToScreen(offsetX + 1, sizeY / 3, m)\\\ +\\\ + displaytext()\\\ + local timer = os.startTimer(math.max(0, t - 0.05))\\\ + local evt, k\\\ + sleep(0.05)\\\ + while true do\\\ + evt, k = os.pullEvent()\\\ + if evt == \\\"timer\\\" and k == timer then\\\ + break\\\ + elseif evt == \\\"key\\\" then\\\ + break\\\ + end\\\ + end\\\ + clear()\\\ +end\",\ + [ \"startup.lua\" ] = \"local d = \\\"\\\"\\\ +--try to find the root\\\ +\\\ +if fs.exists(\\\"/BlahOS\\\") then\\\ + d = \\\"\\\"\\\ +elseif fs.exists(\\\"disk/BlahOS\\\") then\\\ + d = \\\"disk\\\"\\\ +else\\\ + for i = 2, 9 do\\\ + if fs.exists(\\\"disk\\\" .. i .. \\\"/BlahOS\\\") then\\\ + d = \\\"disk\\\" .. i\\\ + break\\\ + end\\\ + end\\\ +end\\\ +\\\ +-- if not fs.exists(\\\"/BlahOS\\\") then\\\ +-- shell.setAlias( \\\"install\\\", d..\\\"/install\\\" )\\\ +-- end\\\ +\\\ +-------\\\ +os.loadAPI(d..\\\"/BlahOS/main.lua\\\")\\\ +os.loadAPI(d..\\\"/BlahOS/screen.lua\\\")\\\ +\\\ +-- vars\\\ +-- Splash made at BigText.org\\\ +local splashText = {\\\ + \\\" ____ _ _ ___ ____ \\\",\\\ + \\\"| __ )| | ____| |__ / _ \\\\\\\\/ ___| \\\",\\\ + \\\"| _ \\\\\\\\| |/ _ | '_ \\\\\\\\ | | | \\\\\\\\___ \\\\\\\\ \\\",\\\ + \\\"| |_) | | (_| | | | | | |_| |___) |\\\",\\\ + \\\"|____/|_|\\\\\\\\__,_|_| |_| \\\\\\\\___/|____/ \\\",\\\ +}\\\ +local randomSplash = {\\\ + \\\"Have some cake\\\",\\\ + \\\"There will be cake\\\",\\\ + \\\"Now with 100% more bugs!\\\",\\\ + \\\"*insert pun here*\\\",\\\ + \\\"DESUDESUDESUDESUDESUDESUDESUDESUDESUDESUDESUDESU\\\",\\\ + \\\"Because we can\\\",\\\ + \\\"I watch you sleep at night\\\",\\\ + \\\"The dungeon master\\\",\\\ + \\\"Now with the amazing resolution of \\\"..screen.sizeX..\\\"x\\\"..screen.sizeY..\\\"!!!\\\",\\\ + \\\"Now with an anoying splash screen!\\\",\\\ + \\\"SCIENCE!\\\",\\\ + \\\"100% lua\\\",\\\ + \\\"Dragonborn\\\",\\\ + \\\"FUS-ROH-DA!\\\",\\\ + \\\"Why don't you take a seat?\\\",\\\ + \\\"An offer you can't refuse\\\",\\\ + \\\"\\\\\\\"MMMMMMPPPPPFFFFFMPPPFFF!!!!\\\\\\\" - Pyro\\\",\\\ + \\\"May contain toxics\\\",\\\ + \\\"Keep out of reach of children\\\",\\\ + \\\"RIP companion cube\\\",\\\ + \\\"HIDE YO KIDZ\\\",\\\ + \\\"Chocolate Rain\\\",\\\ + \\\"NYAN NYAN NYAN\\\"\\\ +}\\\ +\\\ +local splash = function()\\\ + term.clear()\\\ + -- write screen border\\\ + term.setCursorPos(1,1)\\\ + term.write(\\\"+\\\")\\\ + term.write(string.rep(\\\"-\\\", screen.sizeX-2))\\\ + term.write(\\\"+\\\")\\\ + for i = 1, screen.sizeY - 1 do\\\ + term.write(\\\"|\\\")\\\ + for i = 2, screen.sizeX - 1 do\\\ + term.write(\\\" \\\")\\\ + end\\\ + term.write(\\\"|\\\")\\\ + term.setCursorPos(1,i + 1)\\\ + end\\\ + term.write(\\\"+\\\")\\\ + term.write(string.rep(\\\"-\\\", screen.sizeX - 2))\\\ + term.write(\\\"+\\\")\\\ + local xAlign = (screen.sizeX - 33) / 2\\\ +\\\ + -- draw splash logo\\\ + for i = 1, table.getn(splashText) do\\\ + term.setCursorPos(xAlign, 2 + i)\\\ + term.write(splashText[i])\\\ + end\\\ + term.setCursorPos(xAlign, 4 + table.getn(splashText))\\\ + term.write(randomSplash[math.random(table.getn(randomSplash))])\\\ +\\\ + sleep(3)\\\ + term.clear()\\\ + term.setCursorPos(1,1)\\\ +end\\\ +\\\ +local start = function()\\\ + local ignoref, delay, runnable, args\\\ + local t = os.startTimer(0.05)\\\ + local e, k\\\ + while true do\\\ + ignoref = false\\\ + delay = os.clock()\\\ + e, k = os.pullEvent()\\\ + if e == \\\"timer\\\" and k == t then\\\ + newDir = main.mainLoop(shell.dir())\\\ + shell.setDir(newDir)\\\ +\\\ + runnable, args = main.getRunnable()\\\ + if runnable ~= \\\"\\\" and args ~= \\\"\\\" then\\\ + shell.run(runnable, args)\\\ + screen.reload()\\\ + elseif runnable ~= \\\"\\\" and args == \\\"\\\" then\\\ + shell.run(runnable)\\\ + screen.reload()\\\ + end\\\ + t = os.startTimer(0.05)\\\ + elseif e == \\\"key\\\" then\\\ + ignoref = true\\\ + screen.setKey(k)\\\ + end\\\ + delay = os.clock() - delay\\\ + if not ignoref then\\\ + screen.fps = math.floor(1/delay)\\\ + end\\\ + end\\\ +end\\\ +\\\ +splash()\\\ +start()\",\ + [ \"Software/Upload\" ] = \"screen.clear()\\\ +\\\ +screen.border(false)\\\ +\\\ +for i = 4, screen.sizeX - 4 do\\\ + screen.printToScreen(i, screen.sizeY / 3 + 1 - 2, \\\"-\\\")\\\ + screen.printToScreen(i, screen.sizeY / 3 - 1 - 2, \\\"-\\\")\\\ + end\\\ + screen.printToScreen(4, screen.sizeY / 3 - 1 - 2, \\\"+\\\")\\\ + screen.printToScreen(4, screen.sizeY / 3 - 2, \\\"|\\\")\\\ + screen.printToScreen(screen.sizeX - 4, screen.sizeY / 3 - 1 - 2, \\\"+\\\")\\\ + screen.printToScreen(screen.sizeX - 4, screen.sizeY / 3 - 2, \\\"|\\\")\\\ + \\\ + screen.printToScreen(5, screen.sizeY / 3 - 2, \\\"Write down the FULL path of the file\\\")\\\ + \\\ + screen.displaytext()\\\ + \\\ + file = screen.drawInputField()\\\ + if fs.exists(file) and not fs.isDir(file)then\\\ + \\\ + screen.printToScreen(5, screen.sizeY / 3 - 2, \\\"Please give a title for the paste \\\")\\\ + screen.displaytext()\\\ + \\\ + title = screen.drawInputField()\\\ + if title == \\\"\\\" then title = \\\"generic paste\\\" end\\\ + \\\ + h = fs.open(file, \\\"r\\\")\\\ + text = h.readAll()\\\ + h.close()\\\ + \\\ + url = \\\"http://textdump.net/submit.php\\\"\\\ + post = \\\"showid=true&title=\\\"..title..\\\"&text=\\\"..text\\\ + \\\ + tmpf = http.post(url, post)\\\ + \\\ + id = tmpf:readAll()\\\ + \\\ + screen.clear()\\\ + screen.border(false)\\\ +\\\ + screen.displayMessage(\\\"textdump.net/read.php?id=\\\"..id, 4)\\\ + elseif fs.isDir(file) then\\\ + screen.clear()\\\ + screen.border(false)\\\ + \\\ + screen.displayMessage(\\\"That is a folder, not a file\\\", 3)\\\ + else\\\ + screen.clear()\\\ + screen.border(false)\\\ + \\\ + screen.displayMessage(\\\"File not found\\\", 3)\\\ + end\\\ + \",\ + [ \"BlahOS/main.lua\" ] = \"--Toolbar vars\\\ +selectedTb = 0\\\ +canUseToolbar = true\\\ +mustDrawToolbar = true\\\ +\\\ +--General GUI vars\\\ +selector = \\\"->\\\"\\\ +selectorRow = 1\\\ +selectorOffset = 0\\\ +selectorCoulum = True -- true = left and false = right\\\ +maxShow = 12\\\ +maxRows = {}\\\ +maxRows[true] = 5\\\ +maxRows[false] = 5\\\ +currentDir = nil\\\ +textInputVisible = false\\\ +overrideKey = 0\\\ +pasteClip = \\\"\\\"\\\ +pasteName = \\\"\\\"\\\ +pasteMode = 0\\\ +-- 0 idle\\\ +-- 1 move\\\ +-- 2 copy\\\ +files = {}\\\ +dirs = {}\\\ +\\\ +runnableProgram = \\\"\\\"\\\ +runnableArgs = \\\"\\\"\\\ +\\\ +--keys\\\ +local bKeys = {}\\\ +bKeys[\\\"up\\\"] = 200\\\ +bKeys[\\\"left\\\"] = 203\\\ +bKeys[\\\"down\\\"] = 208\\\ +bKeys[\\\"right\\\"] = 205\\\ +bKeys[\\\"return\\\"] = 28\\\ +bKeys[\\\"del\\\"] = 211\\\ +bKeys[\\\"ctrl\\\"] = 29\\\ +bKeys[\\\"alt\\\"] = 56\\\ +bKeys[\\\"f5\\\"] = 63\\\ +\\\ +mainLoop = function(dir)\\\ + if currentDir == nil then\\\ + overrideKey = bKeys[\\\"up\\\"]\\\ + screen.clear()\\\ + currentDir = dir\\\ + selectorRow = 1\\\ + selectorCoulum = True\\\ + drawMenu()\\\ + drawCursor()\\\ + end\\\ +\\\ + returnDir = currentDir\\\ +\\\ + term.clear()\\\ + term.setCursorPos(1, 1)\\\ +\\\ + screen.printToScreen(3,1,dir)\\\ +\\\ + --Render stuff here\\\ + screen.border(true)\\\ + screen.clock()\\\ + if mustDrawToolbar then\\\ + screen.drawToolbar(selectorCoulum, selectedTb)\\\ + end\\\ + screen.displaytext()\\\ +\\\ + key = screen.getKeyPressed()\\\ +\\\ + if overrideKey ~= 0 then\\\ + key = overrideKey\\\ + overrideKey = 0\\\ + end\\\ +\\\ + if key ~= 0 then\\\ +\\\ +-- drawKeyInfo(key)\\\ +\\\ + if canUseToolbar and mustDrawToolbar and selectedTb == 0 and key == bKeys[\\\"ctrl\\\"] then selectedTb = 1\\\ + elseif canUseToolbar and mustDrawToolbar and selectedTb ~= 0 and key == bKeys[\\\"ctrl\\\"] then selectedTb = 0\\\ + elseif canUseToolbar and mustDrawToolbar and selectedTb ~= 0 and key == bKeys[\\\"right\\\"] then selectedTb = normSTb(selectedTb + 1)\\\ + elseif canUseToolbar and mustDrawToolbar and selectedTb ~= 0 and key == bKeys[\\\"left\\\"] then selectedTb = normSTb(selectedTb - 1)\\\ + elseif key == bKeys[\\\"alt\\\"] and false then\\\ + mustDrawToolbar = mustDrawToolbar ~= true\\\ + canUseToolbar = mustDrawToolbar\\\ + selectedTb = 0\\\ + elseif key == bKeys[\\\"return\\\"] and selectedTb == 0 and selectorCoulum == true then\\\ + local selDir = dirs[selectorRow]\\\ + returnDir = fs.combine(dir..\\\"/\\\"..selDir, \\\"\\\")\\\ + if returnDir == \\\"BlahOS\\\" or returnDir == \\\"rom\\\" then\\\ + screen.displayMessage(\\\"WARNING: this is a system folder\\\", 3)\\\ + reloadAll()\\\ + end\\\ + currentDir = nil\\\ + elseif key == bKeys[\\\"return\\\"] and selectedTb == 1 and selectorCoulum == true and dir ~= \\\"\\\" and selectorRow == 1 then\\\ + screen.displayMessage(\\\"You cannot rename that!\\\",2)\\\ + reloadAll()\\\ + elseif key == bKeys[\\\"return\\\"] and selectedTb == 2 and selectorCoulum == true and dir ~= \\\"\\\" and selectorRow == 1 then\\\ + screen.displayMessage(\\\"You cannot cut that!\\\",2)\\\ + reloadAll()\\\ + elseif key == bKeys[\\\"return\\\"] and selectedTb == 6 and selectorCoulum == true and dir ~= \\\"\\\" and selectorRow == 1 then\\\ + screen.displayMessage(\\\"You cannot delete that!\\\",2)\\\ + reloadAll()\\\ + elseif key == bKeys[\\\"return\\\"] and selectedTb == 6 and selectorCoulum == true and dir ~= \\\"\\\" and selectorRow == 1 then\\\ + screen.displayMessage(\\\"You cannot copy that!\\\",2)\\\ + reloadAll()\\\ + elseif key == bKeys[\\\"return\\\"] and selectedTb == 2 and selectorCoulum == true then\\\ + pasteMode = 1\\\ + pasteName = dirs[selectorRow]\\\ + pasteClip = dir..\\\"/\\\"..dirs[selectorRow]\\\ + screen.displayMessage(\\\"The folder \\\\\\\"\\\"..dirs[selectorRow]..\\\"\\\\\\\" was cut\\\",3)\\\ + reloadAll()\\\ + elseif key == bKeys[\\\"return\\\"] and selectedTb == 3 and selectorCoulum == true then\\\ + pasteMode = 2\\\ + pasteName = dirs[selectorRow]\\\ + pasteClip = dir..\\\"/\\\"..dirs[selectorRow]\\\ + screen.displayMessage(\\\"The folder \\\\\\\"\\\"..dirs[selectorRow]..\\\"\\\\\\\" was copied\\\",3)\\\ + reloadAll()\\\ + elseif key == bKeys[\\\"return\\\"] and selectedTb == 4 and selectorCoulum == true then\\\ + if pasteMode == 0 then\\\ + screen.displayMessage(\\\"Nothing to paste\\\", 2)\\\ + elseif pasteMode == 1 then\\\ + pasteMode = 0\\\ + if fs.exists(dir..\\\"/\\\"..pasteName) then\\\ + fs.delete(dir..\\\"/\\\"..pasteName)\\\ + end\\\ + fs.move(pasteClip, dir..\\\"/\\\"..pasteName)\\\ + screen.displayMessage(\\\"The folder \\\\\\\"\\\"..pasteName..\\\"\\\\\\\" was moved\\\",3)\\\ + elseif pasteMode == 2 then\\\ + if fs.exists(dir..\\\"/\\\"..pasteName) then\\\ + fs.delete(dir..\\\"/\\\"..pasteName)\\\ + end\\\ + fs.copy(pasteClip, dir..\\\"/\\\"..pasteName)\\\ + screen.displayMessage(\\\"The folder \\\\\\\"\\\"..pasteName..\\\"\\\\\\\" was pasted\\\",3)\\\ + end\\\ + overrideKey = bKeys[\\\"up\\\"]\\\ + reloadAll()\\\ + elseif key == bKeys[\\\"return\\\"] and selectedTb == 1 and selectorCoulum == true then\\\ + rndir = dir..\\\"/\\\"..screen.drawInputField()\\\ + if rndir ~= dir..\\\"/\\\" and fs.isDir(rndir) == false and isFile(rndir) == false then\\\ + fs.move(dir..\\\"/\\\"..dirs[selectorRow], rndir)\\\ + end\\\ + overrideKey = bKeys[\\\"up\\\"]\\\ + reloadAll()\\\ + elseif key == bKeys[\\\"return\\\"] and selectedTb == 5 and selectorCoulum == true then\\\ + mkdir = dir..\\\"/\\\"..screen.drawInputField()\\\ + if mkdir ~= dir..\\\"/\\\" and fs.isDir(mkdir) == false and isFile(mkdir) == false then\\\ + fs.makeDir(mkdir)\\\ + end\\\ + overrideKey = bKeys[\\\"up\\\"]\\\ + reloadAll()\\\ + elseif key == bKeys[\\\"return\\\"] and selectedTb == 6 and selectorCoulum == true then\\\ + local validAns = false\\\ + while validAns == false do\\\ + screen.displayMessage(\\\"Are you sure, Yes or No?\\\",3)\\\ + ans = string.lower(screen.drawInputField())\\\ + validAns = ans == \\\"y\\\" or ans == \\\"n\\\" or ans == \\\"yes\\\" or ans == \\\"no\\\"\\\ + if validAns == false then\\\ + screen.displayMessage(\\\"Invalid awnser\\\", 1)\\\ + end\\\ + end\\\ + if ans == \\\"y\\\" or ans == \\\"yes\\\" then\\\ + fs.delete(dir..\\\"/\\\"..dirs[selectorRow])\\\ + end\\\ + overrideKey = bKeys[\\\"up\\\"]\\\ + reloadAll()\\\ +\\\ + elseif key == bKeys[\\\"return\\\"] and selectedTb == 1 and selectorCoulum == false and files[selectorRow] == \\\"\\\" then\\\ + screen.displayMessage(\\\"Nothing to edit\\\",2)\\\ + reloadAll()\\\ + elseif key == bKeys[\\\"return\\\"] and selectedTb == 2 and selectorCoulum == false and files[selectorRow] == \\\"\\\" then\\\ + screen.displayMessage(\\\"Nothing to rename\\\",2)\\\ + reloadAll()\\\ + elseif key == bKeys[\\\"return\\\"] and selectedTb == 3 and selectorCoulum == false and files[selectorRow] == \\\"\\\" then\\\ + screen.displayMessage(\\\"Nothing to cut\\\",2)\\\ + reloadAll()\\\ + elseif key == bKeys[\\\"return\\\"] and selectedTb == 4 and selectorCoulum == false and files[selectorRow] == \\\"\\\" then\\\ + screen.displayMessage(\\\"Nothing to copy\\\",2)\\\ + reloadAll()\\\ + elseif key == bKeys[\\\"return\\\"] and selectedTb == 7 and selectorCoulum == false and files[selectorRow] == \\\"\\\" then\\\ + screen.displayMessage(\\\"Nothing to delete\\\",2)\\\ + reloadAll()\\\ +\\\ + elseif key == bKeys[\\\"return\\\"] and selectedTb == 7 and selectorCoulum == false then\\\ + local validAns = false\\\ + while validAns == false do\\\ + screen.displayMessage(\\\"Are you sure, Yes or No?\\\",3)\\\ + ans = string.lower(screen.drawInputField())\\\ + validAns = ans == \\\"y\\\" or ans == \\\"n\\\" or ans == \\\"yes\\\" or ans == \\\"no\\\"\\\ + if validAns == false then\\\ + screen.displayMessage(\\\"Invalid awnser\\\", 1)\\\ + end\\\ + end\\\ + if ans == \\\"y\\\" or ans == \\\"yes\\\" then\\\ + fs.delete(dir..\\\"/\\\"..files[selectorRow])\\\ + end\\\ + overrideKey = bKeys[\\\"up\\\"]\\\ + reloadAll()\\\ + elseif key == bKeys[\\\"return\\\"] and selectedTb == 6 and selectorCoulum == false then\\\ + rndir = screen.drawInputField()\\\ + if rndir ~= dir..\\\"/\\\" and fs.isDir(dir..\\\"/\\\"..rndir) == false and isFile(dir..\\\"/\\\"..rndir) == false then\\\ + runnableProgram = \\\"edit\\\"\\\ + runnableArgs = rndir\\\ + currentDir = dir\\\ + reloadAll()\\\ + end\\\ + elseif key == bKeys[\\\"return\\\"] and selectedTb == 5 and selectorCoulum == false then\\\ + if pasteMode == 0 then\\\ + screen.displayMessage(\\\"Nothing to paste\\\",2)\\\ + elseif pasteMode == 1 then\\\ + pasteMode = 0\\\ + if fs.exists(dir..\\\"/\\\"..pasteName) then\\\ + fs.delete(dir..\\\"/\\\"..pasteName)\\\ + end\\\ + fs.move(pasteClip, dir..\\\"/\\\"..pasteName)\\\ + screen.displayMessage(\\\"The folder \\\\\\\"\\\"..pasteName..\\\"\\\\\\\" was moved\\\",3)\\\ + elseif pasteMode == 2 then\\\ + if fs.exists(dir..\\\"/\\\"..pasteName) then\\\ + fs.delete(dir..\\\"/\\\"..pasteName)\\\ + end\\\ + fs.copy(pasteClip, dir..\\\"/\\\"..pasteName)\\\ + screen.displayMessage(\\\"The folder \\\\\\\"\\\"..pasteName..\\\"\\\\\\\" was pasted\\\",3)\\\ + end\\\ + reloadAll()\\\ + elseif key == bKeys[\\\"return\\\"] and selectedTb == 4 and selectorCoulum == false then\\\ + pasteMode = 2\\\ + pasteName = files[selectorRow]\\\ + pasteClip = dir..\\\"/\\\"..files[selectorRow]\\\ + screen.displayMessage(\\\"The folder \\\\\\\"\\\"..files[selectorRow]..\\\"\\\\\\\" was copied\\\",3)\\\ + reloadAll()\\\ + elseif key == bKeys[\\\"return\\\"] and selectedTb == 3 and selectorCoulum == false then\\\ + pasteMode = 1\\\ + pasteName = files[selectorRow]\\\ + pasteClip = dir..\\\"/\\\"..files[selectorRow]\\\ + screen.displayMessage(\\\"The folder \\\\\\\"\\\"..files[selectorRow]..\\\"\\\\\\\" was cut\\\",3)\\\ + reloadAll()\\\ + elseif key == bKeys[\\\"return\\\"] and selectedTb == 2 and selectorCoulum == false then\\\ + rndir = dir..\\\"/\\\"..screen.drawInputField()\\\ + if rndir ~= dir..\\\"/\\\" and fs.isDir(rndir) == false and isFile(rndir) == false then\\\ + fs.move(dir..\\\"/\\\"..files[selectorRow], rndir)\\\ + end\\\ + overrideKey = bKeys[\\\"up\\\"]\\\ + reloadAll()\\\ + elseif key == bKeys[\\\"return\\\"] and selectedTb == 1 and selectorCoulum == false then\\\ + runnableProgram = \\\"edit\\\"\\\ + runnableArgs = files[selectorRow]\\\ + elseif key == bKeys[\\\"return\\\"] and selectedTb == 0 and selectorCoulum == false then\\\ + runnableArgs = \\\"\\\"\\\ + runnableProgram = files[selectorRow]\\\ + elseif key == bKeys[\\\"f5\\\"] then\\\ + reloadAll()\\\ + currentDir = dir\\\ + end\\\ +\\\ + -- try to move the cursor\\\ + if selectedTb == 0 then\\\ + moveCursor(key)\\\ + end\\\ +\\\ + end\\\ + -- End Render\\\ + return returnDir\\\ +end\\\ +\\\ +isFile = function(s)\\\ + fls = getFiles()\\\ + found = false\\\ + for flsl = 1, table.getn(fls) do\\\ + if fls[flsl] == s then\\\ + found = true\\\ + break\\\ + end\\\ + end\\\ + return found\\\ +end\\\ +\\\ +reloadAll = function()\\\ + selectedTb = 0\\\ + overrideKey = bKeys[\\\"up\\\"]\\\ + screen.clear()\\\ + selectorRow = 1\\\ + selectorCoulum = True\\\ + drawMenu()\\\ + drawCursor()\\\ +end\\\ +\\\ +reload = function()\\\ + overrideKey = bKeys[\\\"up\\\"]\\\ + screen.clear()\\\ + drawMenu()\\\ + drawCursor()\\\ +end\\\ +\\\ +moveCursor = function(d)\\\ + resetCursor()\\\ +\\\ + if selectorRow == nil then\\\ + selectorRow = 1\\\ + end\\\ + if selectorCoulum == nil then\\\ + selectorCoulum = true\\\ + end\\\ +\\\ + if d == bKeys[\\\"right\\\"] and maxRows[false] ~= 0 then\\\ + selectorRow = 1\\\ + selectorCoulum = false\\\ + elseif d == bKeys[\\\"left\\\"] and maxRows[true] ~= 0 then\\\ + selectorCoulum = true\\\ + selectorRow = 1\\\ + elseif d == bKeys[\\\"up\\\"] and selectorRow > 1 then\\\ + selectorRow = selectorRow - 1\\\ + elseif d == bKeys[\\\"down\\\"] and selectorRow < maxRows[selectorCoulum] then\\\ + selectorRow = selectorRow + 1\\\ + end\\\ +\\\ + if selectorRow > 11 then\\\ + selectorOffset = selectorRow - 11\\\ + drawMenu()\\\ + elseif selectorOffset > 0 and selectorRow < 12 then\\\ + selectorOffset = 0\\\ + drawMenu()\\\ + else\\\ + electorOffset = 0\\\ + end\\\ +\\\ + -- draw the cursor\\\ + drawCursor()\\\ +\\\ +end\\\ +\\\ +getRunnable = function()\\\ + local runnable = runnableProgram\\\ + local args = runnableArgs\\\ +\\\ + runnableProgram = \\\"\\\"\\\ + runnableArgs = \\\"\\\"\\\ +\\\ + return runnable, args\\\ +end\\\ +\\\ +drawKeyInfo = function(k)\\\ + local offset = screen.sizeX - 9\\\ + screen.printToScreen(offset, 2, \\\"Key: \\\"..k)\\\ +end\\\ +\\\ +drawCursor = function()\\\ + local x = 1\\\ + local y = selectorRow + 3\\\ +\\\ + if selectorRow > 11 then\\\ + y = 11 + 3\\\ + end\\\ +\\\ + if selectorCoulum == false then\\\ + x = screen.sizeX / 2 - 1\\\ + end\\\ + screen.printToScreen(x, y, selector)\\\ +end\\\ +\\\ +getFiles = function()\\\ + local list = fs.list(currentDir)\\\ + local size = table.getn(list)\\\ + local fills = {}\\\ +\\\ + for f = 1, size do\\\ + if fs.isDir(currentDir..\\\"/\\\"..list[f]) == false then\\\ + fills[#fills + 1] = list[f]\\\ + end\\\ + end\\\ +\\\ + if table.getn(fills) == 0 then\\\ + fills[1] = \\\"\\\"\\\ + end\\\ +\\\ + return fills\\\ +end\\\ +\\\ +getDirs = function()\\\ + local list = fs.list(currentDir)\\\ + local size = table.getn(list)\\\ + local fills = {}\\\ +\\\ + if currentDir ~= \\\"\\\" then\\\ + fills[1] = \\\"..\\\\\\\\\\\"\\\ + end\\\ +\\\ + for f = 1, size do\\\ + if fs.isDir(fs.combine(currentDir, list[f])) then\\\ + fills[#fills + 1] = list[f]\\\ + end\\\ + end\\\ + return fills\\\ +end\\\ +\\\ +resetCursor = function()\\\ + local x = 1\\\ + local y = selectorRow + 3\\\ + if selectorCoulum == false then\\\ + x = screen.sizeX / 2 - 1\\\ + end\\\ + screen.printToScreen(x,y,\\\"\\\")\\\ +end\\\ +\\\ +normSTb = function(s)\\\ + local l = 7\\\ + if selectorCoulum then\\\ + l = 6\\\ + end\\\ +\\\ + if s == 0 then\\\ + return 1\\\ + elseif s > l then\\\ + return s - 1\\\ + else\\\ + return s\\\ + end\\\ +end\\\ +\\\ +drawMenu = function()\\\ + drawCursor()\\\ +\\\ + --Draw titles\\\ + screen.printToScreen(1, 3, \\\"//Folders\\\")\\\ + screen.printToScreen(screen.sizeX / 2 - 1, 3, \\\"//Files\\\")\\\ +\\\ + --Draw divider\\\ + for dl = 3, screen.maxDrawY do\\\ + screen.printToScreen(screen.sizeX / 2 - 2, dl, \\\"|\\\")\\\ + end\\\ + screen.printToScreen(screen.sizeX / 2 - 2, screen.maxDrawY, \\\"+\\\")\\\ + screen.printToScreen(screen.sizeX / 2 - 2, 2, \\\"+\\\")\\\ +\\\ + --draw files/folders\\\ + files = getFiles()\\\ + maxRows[false] = table.getn(files)\\\ + dirs = getDirs()\\\ + maxRows[true] = table.getn(dirs)\\\ +\\\ + diroffset = 0\\\ + fileoffset = 0\\\ +\\\ + if selectorCoulum then\\\ + diroffset = selectorOffset\\\ + else\\\ + fileoffset = selectorOffset\\\ + end\\\ +\\\ + --Folders\\\ + for fl = 1, maxRows[true] do\\\ + screen.printToScreen(3, 3 + fl, dirs[fl + diroffset])\\\ + end\\\ + --Files\\\ + for fl = 1, maxRows[false] do\\\ + screen.printToScreen(screen.sizeX / 2 + 1, 3 + fl, files[fl + fileoffset])\\\ + end\\\ +end\",\ + [ \"Software/Download\" ] = \"download = function(url)\\\ + local tmpf = http.get(url)\\\ + local pastecont = \\\"\\\"\\\ + local i = 1\\\ + while true do\\\ + local line = tmpf:readLine()\\\ + if line == nil then break end\\\ + if i == 1 then\\\ + pastecont = line\\\ + else\\\ + pastecont = pastecont..\\\"\\\\n\\\"..line\\\ + end\\\ + i = i+1\\\ + end\\\ + tmpf:close()\\\ + local file = io.open(\\\"Downloads/download_\\\"..getFilename(), \\\"w\\\")\\\ + file:write(pastecont)\\\ + file:close()\\\ + return \\\"pie!\\\"\\\ +end\\\ + \\\ +function getFilename()\\\ + local id = 1\\\ + while fs.exists(\\\"Downloads/download_\\\"..id) do\\\ + id = id + 1\\\ + end\\\ + \\\ + return id\\\ +end\\\ +\\\ +screen.clear()\\\ +\\\ +if fs.exists(\\\"/Downloads/\\\") and not fs.isDir(\\\"/Downloads\\\") then\\\ + screen.displayMessage(\\\"Please rename the file \\\\\\\"Downloads\\\\\\\" to something else\\\", 3)\\\ +end\\\ + \\\ +\\\ +if not fs.exists(\\\"/Downloads/\\\") then\\\ + fs.makeDir(\\\"/Downloads/\\\")\\\ +end\\\ +\\\ +screen.border(false)\\\ +\\\ +for i = 4, screen.sizeX - 4 do\\\ + screen.printToScreen(i, screen.sizeY / 3 + 1 - 2, \\\"-\\\")\\\ + screen.printToScreen(i, screen.sizeY / 3 - 1 - 2, \\\"-\\\")\\\ +end\\\ +screen.printToScreen(4, screen.sizeY / 3 - 1 - 2, \\\"+\\\")\\\ +screen.printToScreen(4, screen.sizeY / 3 - 2, \\\"|\\\")\\\ +screen.printToScreen(screen.sizeX - 4, screen.sizeY / 3 - 1 - 2, \\\"+\\\")\\\ +screen.printToScreen(screen.sizeX - 4, screen.sizeY / 3 - 2, \\\"|\\\")\\\ +\\\ +screen.printToScreen(5, screen.sizeY / 3 - 2, \\\"textdump or pastebin?\\\")\\\ +\\\ +screen.displaytext()\\\ + \\\ +source = string.lower(screen.drawInputField())\\\ +\\\ +if source == \\\"pastebin\\\" or source == \\\"2\\\" then\\\ + screen.printToScreen(5, screen.sizeY / 3 - 2, \\\"Enter the pastebint paste ID\\\")\\\ +\\\ + screen.displaytext()\\\ + \\\ + id = string.lower(screen.drawInputField())\\\ + if id == \\\"\\\" then \\\ + screen.clear()\\\ + screen.border(false)\\\ + screen.displayMessage(\\\"Aborting\\\", 3) \\\ + end\\\ + \\\ + local r = download(\\\"http://pastebin.com/raw.php?i=\\\"..id)\\\ + if r == \\\"pie!\\\" then\\\ + screen.clear()\\\ + screen.displayMessage(\\\"saved to \\\\\\\"Downloads\\\\\\\\download_\\\"..(getFilename() - 1)..\\\"\\\\\\\"\\\", 3)\\\ + else\\\ + screen.clear()\\\ + screen.displayMessage(\\\"Something went wrong\\\", 3)\\\ + end\\\ +elseif source == \\\"textdump\\\" or source == \\\"1\\\" then\\\ + screen.printToScreen(5, screen.sizeY / 3 - 2, \\\"Enter the textdump ID\\\")\\\ +\\\ + screen.displaytext()\\\ + \\\ + id = string.lower(screen.drawInputField())\\\ + \\\ + if id == \\\"\\\" then \\\ + screen.clear()\\\ + screen.border(false)\\\ + screen.displayMessage(\\\"Aborting\\\", 3)\\\ +\\\ + end\\\ + local url = \\\"http://textdump.net/raw.php?id=\\\"..id\\\ + r = download(url)\\\ + if r == \\\"pie!\\\" then\\\ + screen.clear()\\\ + screen.displayMessage(\\\"saved to \\\\\\\"Downloads\\\\\\\\download_\\\"..(getFilename() - 1)..\\\"\\\\\\\"\\\", 3)\\\ + else\\\ + screen.clear()\\\ + screen.border(false)\\\ + screen.displayMessage(\\\"Something went wrong\\\", 3)\\\ + end\\\ + \\\ +else \\\ + screen.clear()\\\ + screen.border(false)\\\ + \\\ + screen.displayMessage(\\\"That is not a valid source\\\", 3)\\\ +end\\\ + \",\ + [ \"help.lua\" ] = \"--vars\\\ +currentScreen = 0\\\ +keepalive = true\\\ +screens = {}\\\ +\\\ +setTitle = function(s)\\\ + term.setCursorPos(3,2)\\\ + write(s)\\\ + term.setCursorPos(1,1)\\\ +end\\\ +\\\ +render = function()\\\ + term.clear()\\\ + term.setCursorPos(1,1)\\\ + screen.border(true)\\\ + screen.clock()\\\ + screen.displaytext()\\\ + screen.clear()\\\ +end\\\ +\\\ +start = function()\\\ + term.clear()\\\ + screen.clear()\\\ + os.startTimer(1/20)\\\ + while keepalive do\\\ + ignoref = false\\\ + delay = os.clock()\\\ + local e,k = os.pullEvent()\\\ + if e == \\\"timer\\\" then\\\ +\\\ + viewScreen()\\\ +\\\ + os.startTimer(1/20)\\\ + elseif e == \\\"key\\\" then\\\ + ignoref = true\\\ + screen.setKey(k)\\\ + end\\\ + delay = os.clock() - delay\\\ + if not ignoref then\\\ + screen.fps = math.floor(1/delay)\\\ + end\\\ + end\\\ +end\\\ +\\\ +viewScreen = function()\\\ + screens[currentScreen]()\\\ +end\\\ +\\\ +screen0 = function()\\\ + render()\\\ + screen.displayMessage(\\\"Thank you for downloading Blah OS\\\",3)\\\ + currentScreen = 1\\\ +end\\\ +\\\ +screen1 = function()\\\ + -- menu\\\ + local k = screen.getKeyPressed()\\\ + p = {\\\ + \\\"Welcome to Blah OS V0.4,\\\",\\\ + \\\"\\\",\\\ + \\\"So it seems like you need some help. I can \\\",\\\ + \\\"give you that, but I need to know what you\\\",\\\ + \\\"want to know.\\\",\\\ + \\\"Press the keys in the [] to go to a subject.\\\",\\\ + \\\"[1] Controls\\\",\\\ + \\\"[2] Bugs\\\",\\\ + \\\"[3] Exit\\\"\\\ + }\\\ +\\\ + if k ~= nil then\\\ + if k == 2 then\\\ + currentScreen = 2\\\ + elseif k == 3 then\\\ + currentScreen = 3\\\ + elseif k == 4 then\\\ + keepalive = false\\\ + end\\\ + end\\\ +\\\ + for i = 1, table.getn(p) do\\\ + screen.printToScreen(2,2 + i,p[i])\\\ + end\\\ + render()\\\ + setTitle(\\\"Main menu\\\")\\\ +end\\\ +\\\ +screen2 = function()\\\ + local k = screen.getKeyPressed()\\\ + p ={\\\ + \\\"The controls\\\",\\\ + \\\"\\\",\\\ + \\\"CRTL: Switch between the toolbar/navigator\\\",\\\ + \\\"Return: Select an option in the toolbat,\\\",\\\ + \\\" open folder or run a program.\\\",\\\ + \\\"Arrow keys: Move the 'cursor' arround\\\",\\\ + \\\"F5: Refreshes the screen\\\",\\\ + \\\"\\\",\\\ + \\\"[1] Back to the Main menu\\\",\\\ + \\\"\\\"\\\ + }\\\ +\\\ + if k ~= nil then\\\ + if k == 2 then currentScreen = 1\\\ + end\\\ + end\\\ +\\\ + for i = 1, table.getn(p) do screen.printToScreen(2,2 + i,p[i]) end\\\ + render()\\\ + setTitle(\\\"Controls\\\")\\\ +end\\\ +\\\ +screen3 = function()\\\ + local k = screen.getKeyPressed()\\\ + p ={\\\ + \\\"A list of common/known bugs\\\",\\\ + \\\"- Messageboxes don't always show\\\",\\\ + \\\"- Flickering text\\\",\\\ + \\\"- Low FPS\\\",\\\ + \\\"- The program crashes when acces is denied \\\",\\\ + \\\" to a folder\\\",\\\ + \\\"\\\",\\\ + \\\"\\\",\\\ + \\\"[1] Back to the Main menu\\\",\\\ + \\\"\\\"\\\ + }\\\ +\\\ + if k ~= nil then\\\ + if k == 2 then currentScreen = 1\\\ + end\\\ + end\\\ +\\\ + for i = 1, table.getn(p) do screen.printToScreen(2,2 + i,p[i]) end\\\ + render()\\\ + setTitle(\\\"Bugs\\\")\\\ +end\\\ +\\\ +screens[0] = screen0\\\ +screens[1] = screen1\\\ +screens[2] = screen2\\\ +screens[3] = screen3\\\ +\\\ +start()\",\ + install = \"d = \\\"\\\"\\\ +line = 6\\\ +--try to find the root\\\ +\\\ +if fs.exists(\\\"/BlahOS\\\") then d = \\\"\\\" \\\ +elseif fs.exists(\\\"disk/BlahOS\\\") then d = \\\"disk\\\" \\\ +elseif fs.exists(\\\"disk2/BlahOS\\\") then d = \\\"disk2\\\"\\\ +elseif fs.exists(\\\"disk3/BlahOS\\\") then d = \\\"disk3\\\" \\\ +elseif fs.exists(\\\"disk4/BlahOS\\\") then d = \\\"disk4\\\" \\\ +elseif fs.exists(\\\"disk5/BlahOS\\\") then d = \\\"disk5\\\" \\\ +elseif fs.exists(\\\"disk6/BlahOS\\\") then d = \\\"disk6\\\" \\\ +end\\\ +-------\\\ +os.loadAPI(d..\\\"/BlahOS/screen\\\")\\\ +\\\ +title = {}\\\ +title[1] = \\\" __ __ __ \\\"\\\ +title[2] = \\\"|__)| _ |_ / \\\\\\\\(_ . _ _|_ _ || _ _ \\\"\\\ +title[3] = \\\"|__)|(_|| )\\\\\\\\__/__) || )_)|_(_|||(-| \\\"\\\ +\\\ +writeLine = function(s)\\\ +\\\ + term.setCursorPos(3, line)\\\ + line = line + 1\\\ + if line == screen.sizeY then line = screen.sizeY - 1 end\\\ + print(s)\\\ + \\\ + term.setCursorPos(3 + string.len(s), line - 1)\\\ + --screen.border(false)\\\ +end\\\ +\\\ +\\\ +term.clear()\\\ +term.setCursorPos(1,1)\\\ +screen.border(false)\\\ +for i = 1, table.getn(title) do\\\ + term.setCursorPos(3, i + 1)\\\ + term.write(title[i])\\\ +end\\\ +\\\ +writeLine(\\\"Press enter to install Blah OS \\\")\\\ +writeLine(\\\"or hold ctrl + T to cancle.\\\")\\\ +read()\\\ +screen.border(false)\\\ +line = 2\\\ +writeLine(\\\"Finding/deleting older versions\\\")\\\ +\\\ +\\\ +if not fs.exists(\\\"/BlahOS\\\") and not fs.exists(\\\"/Software\\\") and not fs.exists(\\\"startup\\\") then \\\ + writeLine(\\\" -Found none\\\")\\\ +end\\\ +\\\ +if fs.exists(\\\"/BlahOS\\\") then \\\ + writeLine(\\\" -Deleting \\\\\\\"/BlahOS/\\\\\\\"\\\")\\\ + fs.delete(\\\"/BlahOS\\\") \\\ + write(\\\"[DONE]\\\")\\\ +end\\\ +if fs.exists(\\\"/Software\\\") then \\\ + writeLine(\\\" -Deleting \\\\\\\"/Software/\\\\\\\"\\\")\\\ + fs.delete(\\\"/Software\\\") \\\ + write(\\\"[DONE]\\\")\\\ +end\\\ +if fs.exists(\\\"startup\\\") then \\\ + writeLine(\\\" -Deleting \\\\\\\"startup\\\\\\\"\\\")\\\ + fs.delete(\\\"startup\\\") \\\ + write(\\\"[DONE]\\\")\\\ +end\\\ +if fs.exists(\\\"help\\\") then \\\ + writeLine(\\\" -Deleting \\\\\\\"help\\\\\\\"\\\")\\\ + fs.delete(\\\"help\\\") \\\ + write(\\\"[DONE]\\\")\\\ +end\\\ +writeLine(\\\"\\\")\\\ +writeLine(\\\"Checking data source\\\")\\\ +if fs.exists(\\\"/BlahOS\\\") then d = \\\"\\\" \\\ +elseif fs.exists(\\\"disk/BlahOS\\\") then d = \\\"disk\\\" \\\ +elseif fs.exists(\\\"disk2/BlahOS\\\") then d = \\\"disk2\\\"\\\ +elseif fs.exists(\\\"disk3/BlahOS\\\") then d = \\\"disk3\\\" \\\ +elseif fs.exists(\\\"disk4/BlahOS\\\") then d = \\\"disk4\\\" \\\ +elseif fs.exists(\\\"disk5/BlahOS\\\") then d = \\\"disk5\\\" \\\ +elseif fs.exists(\\\"disk6/BlahOS\\\") then d = \\\"disk6\\\" \\\ +end\\\ +write(\\\"[DONE]\\\")\\\ +\\\ +writeLine(\\\"\\\")\\\ +writeLine(\\\"Copying files\\\")\\\ +fs.copy(d..\\\"/BlahOS/\\\", \\\"BlahOS\\\")\\\ +fs.copy(d..\\\"/help\\\", \\\"help\\\")\\\ +fs.copy(d..\\\"/startup\\\", \\\"startup\\\")\\\ +fs.copy(d..\\\"/Software\\\", \\\"Software\\\")\\\ +write(\\\"[DONE]\\\")\\\ +\\\ +writeLine(\\\"\\\")\\\ +writeLine(\\\"Please remove the instalation disk\\\")\\\ +while fs.exists(d..\\\"/BlahOS\\\") do sleep(1) end\\\ +write(\\\"[DONE]\\\")\\\ +\\\ +writeLine(\\\"\\\")\\\ +writeLine(\\\"Rebooting system in 5\\\")\\\ +sleep(1)\\\ +writeLine(\\\"Rebooting system in 4\\\")\\\ +sleep(1)\\\ +writeLine(\\\"Rebooting system in 3\\\")\\\ +sleep(1)\\\ +writeLine(\\\"Rebooting system in 2\\\")\\\ +sleep(1)\\\ +writeLine(\\\"Rebooting system in 1\\\")\\\ +sleep(1)\\\ +writeLine(\\\"Rebooting system in 0\\\")\\\ +sleep(0.3)\\\ +os.reboot()\\\ +\",\ + },\ +}") +if fs.isReadOnly(outputPath) then + error("Output path is read-only.") +elseif fs.getFreeSpace(outputPath) <= #archive then + error("Insufficient space.") +end +fs.delete(shell.getRunningProgram()) -- saves space +for name, contents in pairs(archive.data) do + stc(colors.lightGray) + write("'" .. name .. "'...") + if contents == true then -- indicates empty directory + fs.makeDir(fs.combine(outputPath, name)) + else + file = fs.open(fs.combine(outputPath, name), "w") + if file then + file.write(contents) + file.close() + end + end + if file then + stc(colors.green) + print("good") + else + stc(colors.red) + print("fail") + end +end +stc(colors.white) +write("Unpacked to '") +stc(colors.yellow) +write(outputPath .. "/") +stc(colors.white) +print("'.")