diff --git a/apps/Ale32bit/homeplus.spk b/apps/Ale32bit/homeplus.spk new file mode 100644 index 0000000..fe495c8 --- /dev/null +++ b/apps/Ale32bit/homeplus.spk @@ -0,0 +1,736 @@ +-- +-- sPhone Application Package +-- Built with SPK builder 1.2 +-- +{ + files = "{\ + [ \"paint.lua\" ] = \"-- Paint created by nitrogenfingers (edited by dan200)\\\ +-- http://www.youtube.com/user/NitrogenFingers\\\ +\\\ +------------\\\ +-- Fields --\\\ +------------\\\ +\\\ +-- The width and height of the terminal\\\ +local w,h = term.getSize()\\\ +\\\ +-- The selected colours on the left and right mouse button, and the colour of the canvas\\\ +local leftColour, rightColour = colours.white, nil\\\ +local canvasColour = colours.black\\\ +\\\ +-- The values stored in the canvas\\\ +local canvas = {}\\\ +\\\ +-- The menu options\\\ +local mChoices = { \\\"Save\\\",\\\"Exit\\\" }\\\ +\\\ +-- The message displayed in the footer bar\\\ +local fMessage = \\\"Press Ctrl to access menu\\\"\\\ +\\\ +-------------------------\\\ +-- Initialisation --\\\ +-------------------------\\\ +\\\ +-- Determine if we can even run this\\\ +if not term.isColour() then\\\ + print(\\\"Requires an Advanced Computer\\\")\\\ + return\\\ +end\\\ +\\\ +-- Determines if the file exists, and can be edited on this computer\\\ +local tArgs = {...}\\\ +if #tArgs == 0 then\\\ + print(\\\"Usage: paint \\\")\\\ + return\\\ +end\\\ +local sPath = shell.resolve(tArgs[1])\\\ +local bReadOnly = fs.isReadOnly(sPath)\\\ +if fs.exists(sPath) and fs.isDir(sPath) then\\\ + print(\\\"Cannot edit a directory.\\\")\\\ + return\\\ +end\\\ +\\\ +term.setBackgroundColor(colors.black)\\\ +term.clear()\\\ +\\\ +---------------\\\ +-- Functions --\\\ +---------------\\\ +\\\ +local function getCanvasPixel( x, y )\\\ + if canvas[y] then\\\ + return canvas[y][x]\\\ + end\\\ + return nil\\\ +end\\\ +\\\ +--[[\\\ + Converts a colour value to a text character\\\ + params: colour = the number to convert to a hex value\\\ + returns: a string representing the chosen colour\\\ +]]\\\ +local function getCharOf( colour )\\\ + -- Incorrect values always convert to nil\\\ + if type(colour) == \\\"number\\\" then\\\ + local value = math.floor( math.log(colour) / math.log(2) ) + 1\\\ + if value >= 1 and value <= 16 then\\\ + return string.sub( \\\"0123456789abcdef\\\", value, value )\\\ + end\\\ + end\\\ + return \\\" \\\"\\\ +end \\\ +\\\ +--[[\\\ + Converts a text character to colour value\\\ + params: char = the char (from string.byte) to convert to number\\\ + returns: the colour number of the hex value\\\ +]]\\\ +local tColourLookup = {}\\\ +for n=1,16 do\\\ + tColourLookup[ string.byte( \\\"0123456789abcdef\\\",n,n ) ] = 2^(n-1)\\\ +end\\\ +local function getColourOf( char )\\\ + -- Values not in the hex table are transparent (canvas coloured)\\\ + return tColourLookup[char]\\\ +end\\\ +\\\ +--[[ \\\ + Loads the file into the canvas\\\ + params: path = the path of the file to open\\\ + returns: nil\\\ +]]\\\ +local function load(path)\\\ + -- Load the file\\\ + if fs.exists(path) then\\\ + local file = fs.open(sPath, \\\"r\\\")\\\ + local sLine = file.readLine()\\\ + while sLine do\\\ + local line = {}\\\ + for x=1,w-2 do\\\ + line[x] = getColourOf( string.byte(sLine,x,x) )\\\ + end\\\ + table.insert( canvas, line )\\\ + sLine = file.readLine()\\\ + end\\\ + file.close()\\\ + end\\\ +end\\\ +\\\ +--[[ \\\ + Saves the current canvas to file \\\ + params: path = the path of the file to save\\\ + returns: true if save was successful, false otherwise\\\ +]]\\\ +local function save(path)\\\ + -- Open file\\\ + local sDir = string.sub(sPath, 1, #sPath - #fs.getName(sPath))\\\ + if not fs.exists(sDir) then\\\ + fs.makeDir(sDir)\\\ + end\\\ +\\\ + local file = fs.open( path, \\\"w\\\" )\\\ + if not file then\\\ + return false\\\ + end\\\ +\\\ + -- Encode (and trim)\\\ + local tLines = {}\\\ + local nLastLine = 0\\\ + for y=1,h-1 do\\\ + local sLine = \\\"\\\"\\\ + local nLastChar = 0\\\ + for x=1,w-2 do\\\ + local c = getCharOf( getCanvasPixel( x, y ) )\\\ + sLine = sLine .. c\\\ + if c ~= \\\" \\\" then\\\ + nLastChar = x\\\ + end\\\ + end\\\ + sLine = string.sub( sLine, 1, nLastChar )\\\ + tLines[y] = sLine\\\ + if string.len( sLine ) > 0 then\\\ + nLastLine = y\\\ + end\\\ + end\\\ +\\\ + -- Save out\\\ + for n=1,nLastLine do\\\ + file.writeLine( tLines[ n ] )\\\ + end\\\ + file.close()\\\ + return true\\\ +end\\\ +\\\ +--[[ \\\ + Draws colour picker sidebar, the pallette and the footer\\\ + returns: nil\\\ +]]\\\ +local function drawInterface()\\\ + -- Footer\\\ + term.setCursorPos(1, h)\\\ + term.setBackgroundColour(colours.black)\\\ + term.setTextColour(colours.yellow)\\\ + term.clearLine()\\\ + term.write(fMessage)\\\ + \\\ + -- Colour Picker\\\ + for i=1,16 do\\\ + term.setCursorPos(w-1, i)\\\ + term.setBackgroundColour( 2^(i-1) )\\\ + term.write(\\\" \\\")\\\ + end\\\ +\\\ + term.setCursorPos(w-1, 17)\\\ + term.setBackgroundColour( canvasColour )\\\ + term.setTextColour( colours.grey )\\\ + term.write(\\\"\\\\127\\\\127\\\")\\\ + \\\ + -- Left and Right Selected Colours\\\ + for i=18,18 do\\\ + term.setCursorPos(w-1, i)\\\ + if leftColour ~= nil then\\\ + term.setBackgroundColour( leftColour )\\\ + term.write(\\\" \\\")\\\ + else\\\ + term.setBackgroundColour( canvasColour )\\\ + term.setTextColour( colours.grey )\\\ + term.write(\\\"\\\\127\\\")\\\ + end\\\ + if rightColour ~= nil then\\\ + term.setBackgroundColour( rightColour )\\\ + term.write(\\\" \\\")\\\ + else\\\ + term.setBackgroundColour( canvasColour )\\\ + term.setTextColour( colours.grey )\\\ + term.write(\\\"\\\\127\\\")\\\ + end\\\ + end\\\ +\\\ + -- Padding\\\ + term.setBackgroundColour( canvasColour )\\\ + for i=20,h-1 do\\\ + term.setCursorPos(w-1, i)\\\ + term.write(\\\" \\\")\\\ + end\\\ +end\\\ +\\\ +--[[ \\\ + Converts a single pixel of a single line of the canvas and draws it\\\ + returns: nil\\\ +]]\\\ +local function drawCanvasPixel( x, y )\\\ + local pixel = getCanvasPixel( x, y )\\\ + if pixel then\\\ + term.setBackgroundColour( pixel or canvasColour )\\\ + term.setCursorPos(x, y)\\\ + term.write(\\\" \\\")\\\ + else\\\ + term.setBackgroundColour( canvasColour )\\\ + term.setTextColour( colours.grey )\\\ + term.setCursorPos(x, y)\\\ + term.write(\\\"\\\\127\\\")\\\ + end\\\ +end\\\ +\\\ +--[[ \\\ + Converts each colour in a single line of the canvas and draws it\\\ + returns: nil\\\ +]]\\\ +local function drawCanvasLine( y )\\\ + for x = 1, 4 do\\\ + drawCanvasPixel( x, y )\\\ + end\\\ +end\\\ +\\\ +--[[ \\\ + Converts each colour in the canvas and draws it\\\ + returns: nil\\\ +]]\\\ +local function drawCanvas()\\\ + for y = 1, 3 do\\\ + drawCanvasLine( y )\\\ + end\\\ +end\\\ +\\\ +--[[\\\ + Draws menu options and handles input from within the menu.\\\ + returns: true if the program is to be exited; false otherwise\\\ +]]\\\ +local function accessMenu()\\\ + -- Selected menu option\\\ + local selection = 1\\\ + \\\ + term.setBackgroundColour(colours.black)\\\ + while true do\\\ + -- Draw the menu\\\ + term.setCursorPos(1,h)\\\ + term.clearLine()\\\ + term.setTextColour(colours.white)\\\ + for k,v in pairs(mChoices) do\\\ + if selection==k then \\\ + term.setTextColour(colours.yellow)\\\ + local ox,_ = term.getCursorPos()\\\ + term.write(\\\"[\\\"..string.rep(\\\" \\\",#v)..\\\"]\\\")\\\ + term.setCursorPos(ox+1,h)\\\ + term.setTextColour(colours.white)\\\ + term.write(v)\\\ + term.setCursorPos(term.getCursorPos()+1,h)\\\ + else\\\ + term.write(\\\" \\\"..v..\\\" \\\")\\\ + end\\\ + end\\\ + \\\ + -- Handle input in the menu\\\ + local id,key = os.pullEvent(\\\"key\\\")\\\ + if id == \\\"key\\\" then\\\ + -- S and E are shortcuts\\\ + if key == keys.s then\\\ + selection = 1\\\ + key = keys.enter\\\ + elseif key == keys.e then\\\ + selection = 2\\\ + key = keys.enter\\\ + end\\\ + \\\ + if key == keys.right then\\\ + -- Move right\\\ + selection = selection + 1\\\ + if selection > #mChoices then\\\ + selection = 1\\\ + end\\\ + \\\ + elseif key == keys.left and selection > 1 then\\\ + -- Move left\\\ + selection = selection - 1\\\ + if selection < 1 then\\\ + selection = #mChoices\\\ + end\\\ + \\\ + elseif key == keys.enter then\\\ + -- Select an option\\\ + if mChoices[selection]==\\\"Save\\\" then \\\ + if bReadOnly then \\\ + fMessage = \\\"Access Denied\\\"\\\ + return false\\\ + end\\\ + local success = save(sPath)\\\ + if success then\\\ + fMessage = \\\"Saved to \\\"..sPath\\\ + else\\\ + fMessage = \\\"Error saving to \\\"..sPath\\\ + end\\\ + return false\\\ + elseif mChoices[selection]==\\\"Exit\\\" then \\\ + return true\\\ + end\\\ + elseif key == keys.leftCtrl or keys == keys.rightCtrl then\\\ + -- Cancel the menu\\\ + return false \\\ + end\\\ + end\\\ + end\\\ +end\\\ +\\\ +--[[ \\\ + Runs the main thread of execution. Draws the canvas and interface, and handles\\\ + mouse and key events.\\\ + returns: nil\\\ +]]\\\ +local function handleEvents()\\\ + local programActive = true\\\ + while programActive do\\\ + local id,p1,p2,p3 = os.pullEvent()\\\ + if id==\\\"mouse_click\\\" or id==\\\"mouse_drag\\\" then\\\ + if p2 >= w-1 and p3 >= 1 and p3 <= 17 then\\\ + if id ~= \\\"mouse_drag\\\" then\\\ + -- Selecting an items in the colour picker\\\ + if p3 <= 16 then\\\ + if p1==1 then\\\ + leftColour = 2^(p3-1)\\\ + else\\\ + rightColour = 2^(p3-1)\\\ + end\\\ + else\\\ + if p1==1 then\\\ + leftColour = nil\\\ + else\\\ + rightColour = nil\\\ + end\\\ + end\\\ + --drawCanvas()\\\ + drawInterface()\\\ + end\\\ + elseif p2 <= 4 and p3 <= 3 then\\\ + -- Clicking on the canvas\\\ + local paintColour = nil\\\ + if p1==1 then\\\ + paintColour = leftColour\\\ + elseif p1==2 then\\\ + paintColour = rightColour\\\ + end\\\ + if not canvas[p3] then\\\ + canvas[p3] = {}\\\ + end\\\ + canvas[p3][p2] = paintColour\\\ +\\\ + drawCanvasPixel( p2, p3 )\\\ + end\\\ + elseif id==\\\"key\\\" then\\\ + if p1==keys.leftCtrl or p1==keys.rightCtrl then\\\ + programActive = not accessMenu()\\\ + drawInterface()\\\ + end\\\ + elseif id==\\\"term_resize\\\" then\\\ + w,h = term.getSize()\\\ + drawCanvas()\\\ + drawInterface()\\\ + end\\\ + end\\\ +end\\\ +\\\ +-- Init\\\ +load(sPath)\\\ +drawCanvas()\\\ +drawInterface()\\\ +\\\ +-- Main loop\\\ +handleEvents()\\\ +\\\ +-- Shutdown\\\ +term.setBackgroundColour(colours.black)\\\ +term.setTextColour(colours.white)\\\ +term.clear()\\\ +term.setCursorPos(1,1)\\\ +\",\ + [ \"homeplus.lua\" ] = \"\\\ +--setup\\\ +if not fs.exists(spk.getDataPath()..\\\"/icons/shellIcon\\\") then\\\ + local f = spk.open(\\\"icons/shellIcon\\\",\\\"w\\\")\\\ + f.write(\\\"4fff\\\\nf4ff\\\\n4f44\\\")\\\ + f.close()\\\ +end\\\ +\\\ +if not fs.exists(spk.getDataPath()..\\\"/config\\\") then\\\ + local f = spk.open(\\\"config\\\",\\\"w\\\")\\\ + f.write(\\\"{[1] = {\\\\\\\"Shell\\\\\\\", \\\\\\\"/rom/programs/shell\\\\\\\"},}\\\")\\\ + f.close()\\\ +end\\\ +\\\ +local iconPos = { --Because i hate math (to rewrite), anyway this is for the standard pocket computer size\\\ + [1] = {3,2,6,4},\\\ + [2] = {9,2,12,4},\\\ + [3] = {15,2,18,4},\\\ + [4] = {21,2,24,4},\\\ + [5] = {3,8,6,10},\\\ + [6] = {9,8,12,10},\\\ + [7] = {15,8,18,10},\\\ + [8] = {21,8,24,10},\\\ + [9] = {3,14,6,16},\\\ + [10] = {9,14,12,16},\\\ + [11] = {15,14,18,16},\\\ + [12] = {21,14,24,16},\\\ +}\\\ +\\\ +local objectsDesktop = {}\\\ +local objCoords = {}\\\ + \\\ +local f = spk.open(\\\"config\\\",\\\"r\\\")\\\ +local objectsDesktop = textutils.unserialise(f.readAll())\\\ +f.close()\\\ +\\\ +local function getCoords(iconNumber)\\\ + if iconPos[iconNumber] then\\\ + local x, y, maxx, maxy\\\ + x = iconPos[iconNumber][1]\\\ + y = iconPos[iconNumber][2]\\\ + maxx = iconPos[iconNumber][3]\\\ + maxy = iconPos[iconNumber][4]\\\ + return x,y,maxx,maxy\\\ + end\\\ + return false\\\ +end\\\ +\\\ +function getProgram(x,y)\\\ + for k,v in pairs(objCoords) do\\\ + local px, py, pex, pey = v[1],v[2],v[3],v[4]\\\ + if x >= px and y >= py and x <= pex and y <= pey then\\\ + return objectsDesktop[k][1], objectsDesktop[k][2]\\\ + end\\\ + end\\\ +end\\\ +\\\ +local function homeSettings()\\\ + local menu = {\\\ + \\\"Add app\\\",\\\ + \\\"Remove app\\\",\\\ + }\\\ + while true do\\\ + local _, id = sPhone.menu(menu,\\\"Home+\\\",\\\"X\\\")\\\ + if id == 0 then\\\ + break\\\ + elseif id == 1 then\\\ + local function redraw()\\\ + term.setBackgroundColor(sPhone.theme[\\\"backgroundColor\\\"])\\\ + term.setTextColor(sPhone.theme[\\\"text\\\"])\\\ + term.clear()\\\ + sPhone.header(\\\"Home+: Add\\\",\\\"X\\\")\\\ + for k,v in pairs(iconPos) do\\\ + paintutils.drawFilledBox(v[1],v[2]+1,v[3],v[4]+1,colors.red)\\\ + end\\\ + for k, v in pairs(objCoords) do\\\ + paintutils.drawFilledBox(v[1],v[2]+1,v[3],v[4]+1,colors.lime)\\\ + end\\\ + end\\\ + \\\ + redraw()\\\ + local w, h = term.getSize()\\\ + while true do\\\ + redraw()\\\ + local _,_,x,y = os.pullEvent(\\\"mouse_click\\\")\\\ + if y == 1 and x == w then\\\ + break\\\ + else\\\ + local a = getProgram(x-1,y-1)\\\ + if not a then\\\ + for k, v in pairs(iconPos) do\\\ + if (x >= v[1] and y >= v[2]) and (x <= v[3] and y <= v[4]) then\\\ + local iconPoss = k\\\ + term.setBackgroundColor(sPhone.theme[\\\"backgroundColor\\\"])\\\ + term.setTextColor(sPhone.theme[\\\"text\\\"])\\\ + term.clear()\\\ + sPhone.header(\\\"Home+: Add\\\")\\\ + term.setCursorPos(1,3)\\\ + visum.align(\\\"center\\\",\\\" Path\\\",false,3)\\\ + visum.align(\\\"center\\\",\\\" (Blank to cancel)\\\",false,4)\\\ + term.setCursorPos(2,6)\\\ + write(\\\"/\\\")\\\ + local path = read()\\\ + if path ~= \\\"\\\" then\\\ + if not fs.exists(\\\"/\\\"..path) then\\\ + sPhone.winOk(\\\"App not found\\\")\\\ + return\\\ + else\\\ + visum.align(\\\"center\\\",\\\" Name\\\",false,8)\\\ + term.setCursorPos(2,10)\\\ + local name = read()\\\ + local f = spk.open(\\\"config\\\",\\\"r\\\")\\\ + local ics = textutils.unserialise(f.readAll())\\\ + f.close()\\\ + ics[iconPoss] = {name,path}\\\ + objectsDesktop[iconPoss] = {name,path}\\\ + local f = spk.open(\\\"config\\\",\\\"w\\\")\\\ + f.write(textutils.serialize(ics))\\\ + f.close()\\\ + sPhone.winOk(\\\"Done!\\\")\\\ + end\\\ + end\\\ + break\\\ + end\\\ + end\\\ + end\\\ + end\\\ + end\\\ + break\\\ + elseif id == 2 then\\\ + local function redraw()\\\ + term.setBackgroundColor(sPhone.theme[\\\"backgroundColor\\\"])\\\ + term.setTextColor(sPhone.theme[\\\"text\\\"])\\\ + term.clear()\\\ + sPhone.header(\\\"Home+: Remove\\\",\\\"X\\\")\\\ + for k,v in pairs(iconPos) do\\\ + paintutils.drawFilledBox(v[1],v[2]+1,v[3],v[4]+1,colors.red)\\\ + end\\\ + for k, v in pairs(objCoords) do\\\ + paintutils.drawFilledBox(v[1],v[2]+1,v[3],v[4]+1,colors.lime)\\\ + end\\\ + end\\\ + \\\ + redraw()\\\ + local w, h = term.getSize()\\\ + while true do\\\ + redraw()\\\ + local _,_,x,y = os.pullEvent(\\\"mouse_click\\\")\\\ + if y == 1 and x == w then\\\ + break\\\ + else\\\ + local a = getProgram(x-1,y-1)\\\ + if a then\\\ + for k, v in pairs(iconPos) do\\\ + if (x >= v[1] and y >= v[2]) and (x <= v[3] and y <= v[4]) then\\\ + local iconPoss = k\\\ + term.setBackgroundColor(sPhone.theme[\\\"backgroundColor\\\"])\\\ + term.setTextColor(sPhone.theme[\\\"text\\\"])\\\ + term.clear()\\\ + local f = spk.open(\\\"config\\\",\\\"r\\\")\\\ + local ics = textutils.unserialise(f.readAll())\\\ + f.close()\\\ + ics[iconPoss] = nil\\\ + objectsDesktop[iconPoss] = nil\\\ + local f = spk.open(\\\"config\\\",\\\"w\\\")\\\ + f.write(textutils.serialize(ics))\\\ + f.close()\\\ + sPhone.winOk(\\\"Done!\\\")\\\ + end\\\ + end\\\ + end\\\ + end\\\ + end\\\ + break\\\ + end\\\ + end\\\ +end\\\ +\\\ +local function footer()\\\ + local menu = {\\\ + \\\"Settings\\\",\\\ + \\\"Home+ Settings\\\",\\\ + \\\"Lock\\\",\\\ + \\\"Info\\\",\\\ + \\\"Shutdown\\\",\\\ + \\\"Reboot\\\",\\\ + }\\\ + \\\ + while true do\\\ + local name, id = sPhone.menu(menu,\\\"Home\\\",\\\"V\\\")\\\ + if id == 0 then\\\ + break\\\ + elseif id == 1 then\\\ + shell.run(\\\"/.sPhone/apps/system/settings\\\")\\\ + break\\\ + elseif id == 2 then\\\ + homeSettings()\\\ + elseif id == 3 then\\\ + sPhone.login()\\\ + break\\\ + elseif id == 4 then\\\ + shell.run(\\\"/.sPhone/apps/system/info\\\")\\\ + break\\\ + elseif id == 5 then\\\ + os.shutdown()\\\ + elseif id == 6 then\\\ + os.reboot()\\\ + end\\\ + end\\\ +end\\\ +\\\ +local function redraw()\\\ + term.setBackgroundColor(sPhone.getTheme(\\\"backgroundColor\\\"))\\\ + term.setTextColor(sPhone.getTheme(\\\"text\\\"))\\\ + term.clear()\\\ + term.setCursorPos(1,1)\\\ + for k, v in pairs(objectsDesktop) do\\\ + local x, y,endx,endy = getCoords(k)\\\ + objCoords[k] = {x,y,endx,endy}\\\ + local icon = paintutils.loadImage(spk.getDataPath()..\\\"/icons/shellIcon\\\")\\\ + paintutils.drawImage(icon,x,y)\\\ + local name, sndName\\\ + if #v[1] > 5 then\\\ + term.setCursorPos(endx-3,endy+1)\\\ + name = string.sub(objectsDesktop[k][1],1,5)\\\ + sndName = string.sub(objectsDesktop[k][1],6,(10 or #v[1]))\\\ + else\\\ + name = objectsDesktop[k][1]\\\ + term.setCursorPos(endx-3,endy+1)\\\ + end\\\ + term.setBackgroundColour(sPhone.getTheme(\\\"backgroundColor\\\"))\\\ + write(name)\\\ + if sndName then\\\ + term.setCursorPos(endx-3,endy+2)\\\ + write(sndName)\\\ + end\\\ + end\\\ + local w,h = term.getSize()\\\ + paintutils.drawLine(1,h,w,h,sPhone.getTheme(\\\"header\\\"))\\\ + term.setTextColor(sPhone.getTheme(\\\"headerText\\\"))\\\ + term.setCursorPos(12,h)\\\ + write(\\\"====\\\")\\\ + term.setCursorPos(w-3,h)\\\ + write(\\\"^^^\\\")\\\ + term.setCursorPos(w-6,h)\\\ + write(\\\"S\\\")\\\ +end\\\ +\\\ +local function main()\\\ + while true do\\\ + redraw()\\\ + local ev = {os.pullEvent()}\\\ + if ev[1] == \\\"key\\\" and ev[2] == keys.leftAlt then\\\ + sPhone.inHome = false\\\ + term.setBackgroundColor(colors.black)\\\ + term.setTextColor(colors.white)\\\ + term.clear()\\\ + term.setCursorPos(1,1)\\\ + sleep(0.1)\\\ + shell.run(\\\"/rom/programs/shell\\\")\\\ + sPhone.inHome = true\\\ + elseif ev[1] == \\\"mouse_click\\\" then\\\ + local x, y = ev[3], ev[4]\\\ + local w,h = term.getSize()\\\ + if y == h then\\\ + if x >= 12 and x <= 15 then\\\ + sPhone.inHome = false\\\ + sleep(0.1)\\\ + shell.run(\\\"/.sPhone/apps/appList\\\")\\\ + sPhone.inHome = true\\\ + elseif x == w-6 then\\\ + sPhone.inHome = false\\\ + term.setBackgroundColor(colors.black)\\\ + term.setTextColor(colors.white)\\\ + term.clear()\\\ + term.setCursorPos(1,1)\\\ + sleep(0.1)\\\ + shell.run(\\\"/.sPhone/apps/store\\\")\\\ + sPhone.inHome = true\\\ + elseif x <= w-1 and x >= w-3 then\\\ + sPhone.inHome = false\\\ + footer()\\\ + sPhone.inHome = true\\\ + end\\\ + else\\\ + local appName, appPath = getProgram(x,y)\\\ + if appName then\\\ + if fs.exists(appPath) then\\\ + sPhone.inHome = false\\\ + term.setBackgroundColor(colors.black)\\\ + term.setTextColor(colors.white)\\\ + term.clear()\\\ + term.setCursorPos(1,1)\\\ + sleep(0.1)\\\ + shell.run(appPath)\\\ + sPhone.inHome = true\\\ + end\\\ + end\\\ + end\\\ + end\\\ + end\\\ +end\\\ +\\\ +local function clockUpdate()\\\ + local w,h = term.getSize()\\\ + while true do\\\ + if sPhone.inHome then\\\ + term.setCursorBlink(false)\\\ + term.setBackgroundColor(sPhone.theme[\\\"header\\\"])\\\ + term.setTextColor(sPhone.theme[\\\"headerText\\\"])\\\ + term.setCursorPos(1,h)\\\ + write(\\\" \\\")\\\ + term.setCursorPos(1,h)\\\ + write(\\\" \\\"..textutils.formatTime(os.time(),true))\\\ + end\\\ + sleep(0)\\\ + end\\\ +end\\\ +\\\ +parallel.waitForAll(main,clockUpdate)\\\ +\",\ +}", + config = "{\ + type = \"home\",\ + name = \"Home+\",\ + version = 1,\ + main = \"homeplus.lua\",\ + id = \"ale32bit.homeplus\",\ + author = \"Ale32bit\",\ + hidden = true,\ +}", +}