From f48288f1a3b978579e13f40886a529a05e66fe49 Mon Sep 17 00:00:00 2001 From: Alessandro Proto Date: Tue, 20 Aug 2024 18:45:28 +0200 Subject: [PATCH] Attempting to rename all files without breaking --- src/apis/config.lua | 2 +- src/init.lua | 145 +++-- src/installer.lua | 32 +- src/sPhone.lua | 1256 +++++++++++++++++++++---------------------- src/startup.lua | 4 +- src/system/vfs.lua | 2 +- 6 files changed, 707 insertions(+), 734 deletions(-) diff --git a/src/apis/config.lua b/src/apis/config.lua index 9ed54d1..526c3c3 100644 --- a/src/apis/config.lua +++ b/src/apis/config.lua @@ -83,7 +83,7 @@ function convert(cfgfile) for _, v in pairs(lines) do local tmp local tmp2 = "" - for match in string.gmatch(v, "[^\=]+") do + for match in string.gmatch(v, "[^\\=]+") do if tmp then tmp2 = tmp2..match else diff --git a/src/init.lua b/src/init.lua index 7e36795..d355aa6 100644 --- a/src/init.lua +++ b/src/init.lua @@ -10,50 +10,33 @@ local function crash(err) term.setCursorBlink(false) term.setBackgroundColor(colors.white) term.clear() - term.setCursorPos(1,1) + term.setCursorPos(1, 1) term.setTextColor(colors.black) if not err then err = "Undefined Error" end - + print("sPhone got an error :(\n") term.setTextColor(colors.red) - print(err) + print(debug.traceback(err)) term.setTextColor(colors.black) print("") if sPhone.version then - print("sPhone "..sPhone.version) + print("sPhone " .. sPhone.version) end - print("Computer ID: "..os.getComputerID()) - if _CC_VERSION then - print("CC Version: ".._CC_VERSION) - print("MC Version: ".._MC_VERSION) - elseif _HOST then - print("Host: ".._HOST) - else - print("CC Version: Under 1.74") - print("MC Version: Undefined") - term.setTextColor(colors.red) - print("Update CC to 1.74 or higher") - term.setTextColor(colors.black) - end - print("LUA Version: ".._VERSION) - if _LUAJ_VERSION then - print("LUAJ Version: ".._LUAJ_VERSION) - end - print("Contact sPhone devs:") - print("GitHub: SertexTeam/sPhone") - print("Thanks for using sPhone") + + + print("Press any key") repeat sleep(0) until os.pullEvent("key") if not sPhone.devMode then - _G.term = nil + os.reboot() end term.setBackgroundColor(colors.black) term.clear() - term.setCursorPos(1,1) + term.setCursorPos(1, 1) sleep(0.1) shell.run("/rom/programs/shell") end @@ -62,7 +45,7 @@ local function recovery() term.setBackgroundColor(colors.white) term.setTextColor(colors.black) term.clear() - term.setCursorPos(1,1) + term.setCursorPos(1, 1) print("sPhone Recovery") print("[1] Hard Reset") print("[2] Update sPhone") @@ -78,21 +61,25 @@ local function recovery() if not fs.isReadOnly(v) then if fs.isDir(v) then shell.setDir(v) - for k, v in pairs(fs.list("/"..v)) do + for k, v in pairs(fs.list("/" .. v)) do fs.delete(v) - print("Removed "..shell.dir().."/"..v) + print("Removed " .. shell.dir() .. "/" .. v) end shell.setDir(shell.resolve("..")) end fs.delete(v) - print("Removed "..v) + print("Removed " .. v) end end print("Installing sPhone...") sleep(0.5) - setfenv(loadstring(http.get("https://raw.githubusercontent.com/SertexTeam/sPhone/master/src/installer.lua").readAll()),getfenv())() + setfenv( + loadstring(http.get("https://raw.githubusercontent.com/SertexTeam/sPhone/master/src/installer.lua").readAll()), + getfenv())() elseif k == 3 then - setfenv(loadstring(http.get("https://raw.githubusercontent.com/SertexTeam/sPhone/master/src/installer.lua").readAll()),getfenv())() + setfenv( + loadstring(http.get("https://raw.githubusercontent.com/SertexTeam/sPhone/master/src/installer.lua").readAll()), + getfenv())() elseif k == 4 then fs.delete("/.sPhone/config") fs.delete("/.sPhone/cache") @@ -109,33 +96,33 @@ local function recovery() end end - term.setBackgroundColor(colors.white) - term.setCursorPos(1,1) - term.clear() - term.setTextColor(colors.black) - print("Sertex") - if fs.exists("/.sPhone/interfaces/bootImage") then - local bootImage = paintutils.loadImage("/.sPhone/interfaces/bootImage") - paintutils.drawImage(bootImage, 11,7) - else - print("Missing bootImage") - end - local w, h = term.getSize() - term.setBackgroundColor(colors.white) - term.setTextColor(colors.black) - term.setCursorPos(1,h) - write("Press ALT to recovery mode") - local bootTimer = os.startTimer(1) - while true do - local e,k = os.pullEvent() - if e == "key" and k == 56 then - recovery() - break - elseif e == "timer" and k == bootTimer then - safemode = false - break - end +term.setBackgroundColor(colors.white) +term.setCursorPos(1, 1) +term.clear() +term.setTextColor(colors.black) +print("Sertex") +if fs.exists("/.sPhone/interfaces/bootImage") then + local bootImage = paintutils.loadImage("/.sPhone/interfaces/bootImage") + paintutils.drawImage(bootImage, 11, 7) +else + print("Missing bootImage") +end +local w, h = term.getSize() +term.setBackgroundColor(colors.white) +term.setTextColor(colors.black) +term.setCursorPos(1, h) +write("Press ALT to recovery mode") +local bootTimer = os.startTimer(1) +while true do + local e, k = os.pullEvent() + if e == "key" and k == 56 then + recovery() + break + elseif e == "timer" and k == bootTimer then + safemode = false + break end +end if not fs.exists("/.sPhone/sPhone") then printError("sPhone not installed") @@ -143,12 +130,12 @@ if not fs.exists("/.sPhone/sPhone") then return end - + local runningOnStartup term.setBackgroundColor(colors.black) term.clear() -term.setCursorPos(1,1) +term.setCursorPos(1, 1) term.setTextColor(colors.white) if sPhone then @@ -161,7 +148,7 @@ if not pocket or not term.isColor() then return end -local tArgs = {...} +local tArgs = { ... } local argData = { ["-u"] = false, @@ -169,29 +156,35 @@ local argData = { } if #tArgs > 0 then - while #tArgs > 0 do - local tArgs = table.remove(tArgs, 1) - if argData[tArgs] ~= nil then - argData[tArgs] = true - end - end + while #tArgs > 0 do + local tArgs = table.remove(tArgs, 1) + if argData[tArgs] ~= nil then + argData[tArgs] = true + end + end end if argData["-u"] then print("Getting installer...") - setfenv(loadstring(http.get("https://raw.githubusercontent.com/SertexTeam/sPhone/master/src/installer.lua").readAll()),getfenv())() + + --setfenv(loadstring(http.get("https://raw.githubusercontent.com/SertexTeam/sPhone/master/src/installer.lua").readAll()),_ENV)() end os.pullEvent = os.oldPullEvent -local ok, err = pcall(function() - setfenv(loadfile("/.sPhone/sPhone"), setmetatable({ - crash = crash, - safemode = safemode, - }, {__index = getfenv()}))() -end) - +local func, err = loadfile("/.sPhone/sPhone.lua", "t", setmetatable({ + crash = crash, + safemode = safemode, +}, { __index = _ENV })) + +if not func then + crash(err) + os.shutdown() + return +end + +local ok, err = pcall(func) if not ok then crash(err) end -_G.term = nil -- The OS ends here - This string force to crash the pda to shutdown +os.shutdown() diff --git a/src/installer.lua b/src/installer.lua index 17eee46..30ede5b 100644 --- a/src/installer.lua +++ b/src/installer.lua @@ -7,29 +7,29 @@ local old = os.pullEvent os.pullEvent = os.pullEventRaw local files = { - ["src/init.lua"] = "/.sPhone/init", - ["src/sPhone.lua"] = "/.sPhone/sPhone", + ["src/init.lua"] = "/.sPhone/init.lua", + ["src/sPhone.lua"] = "/.sPhone/sPhone.lua", - ["install.lua"] = "/.sPhone/update", + ["install.lua"] = "/.sPhone/update.lua", ["LICENSE"] = "/.sPhone/LICENSE", - ["src/apis/sha256.lua"] = "/.sPhone/apis/sha256", - ["src/apis/visum.lua"] = "/.sPhone/apis/visum", - ["src/apis/base64.lua"] = "/.sPhone/apis/base64", - ["src/apis/config.lua"] = "/.sPhone/apis/config", - ["src/apis/task.lua"] = "/.sPhone/apis/task", - ["src/apis/temp.lua"] = "/.sPhone/apis/temp", - ["src/apis/aes.lua"] = "/.sPhone/apis/aes", - ["src/apis/bigfont.lua"] = "/.sPhone/apis/bigfont", + ["src/apis/sha256.lua"] = "/.sPhone/apis/sha256.lua", + ["src/apis/visum.lua"] = "/.sPhone/apis/visum.lua", + ["src/apis/base64.lua"] = "/.sPhone/apis/base64.lua", + ["src/apis/config.lua"] = "/.sPhone/apis/config.lua", + ["src/apis/task.lua"] = "/.sPhone/apis/task.lua", + ["src/apis/temp.lua"] = "/.sPhone/apis/temp.lua", + ["src/apis/aes.lua"] = "/.sPhone/apis/aes.lua", + ["src/apis/bigfont.lua"] = "/.sPhone/apis/bigfont.lua", - ["src/bin/wget.lua"] = "/bin/wget", - ["src/bin/halt.lua"] = "/bin/halt", - ["src/bin/echo.lua"] = "/bin/echo", + ["src/bin/wget.lua"] = "/bin/wget.lua", + ["src/bin/halt.lua"] = "/bin/halt.lua", + ["src/bin/echo.lua"] = "/bin/echo.lua", - ["src/sdk/build.lua"] = "/bin/build", + ["src/sdk/build.lua"] = "/bin/build.lua", - ["src/system/vfs.lua"] = "/.sPhone/system/vfs", + ["src/system/vfs.lua"] = "/.sPhone/system/vfs.lua", ["src/apps/spks/appList.spk"] = "/.sPhone/apps/system/appList.spk", ["src/apps/spks/chat.spk"] = "/.sPhone/apps/system/chat.spk", diff --git a/src/sPhone.lua b/src/sPhone.lua index 1395de4..0e96e17 100644 --- a/src/sPhone.lua +++ b/src/sPhone.lua @@ -6,16 +6,16 @@ local function kernel(...) mainTerm = term.current(), safeMode = false, } - + if safemode then sPhone.safeMode = true safemode = nil end - + sPhone.defaultApps = { ["home"] = "sphone.home", } - + sPhone.theme = { --Default colors ["header"] = colors.blue, ["headerText"] = colors.white, @@ -33,96 +33,96 @@ local function kernel(...) ["lock.inputSide"] = colors.lightBlue, ["lock.error"] = colors.red, } - + sPhone.defaultTheme = sPhone.theme - + if not fs.exists("/.sPhone/apis") then fs.makeDir("/.sPhone/apis") end - + for k, v in pairs(fs.list("/.sPhone/apis")) do - if not fs.isDir("/.sPhone/apis/"..v) then - os.loadAPI("/.sPhone/apis/"..v) + if not fs.isDir("/.sPhone/apis/" .. v) then + os.loadAPI("/.sPhone/apis/" .. v) end end - - if not config.write("/.sPhone/config/sPhone","configVersion",1) then + + if not config.write("/.sPhone/config/sPhone", "configVersion", 1) then config.convert("/.sPhone/config/sPhone") - config.write("/.sPhone/config/sPhone","configVersion",1) + config.write("/.sPhone/config/sPhone", "configVersion", 1) end - + if not fs.exists("/.sPhone/system") then fs.makeDir("/.sPhone/system") end - + for k, v in pairs(fs.list("/.sPhone/system")) do - if not fs.isDir("/.sPhone/system/"..v) then - dofile("/.sPhone/system/"..v) + if not fs.isDir("/.sPhone/system/" .. v) then + dofile("/.sPhone/system/" .. v) end end local sPath = shell.path() - sPath = sPath..":/bin" + sPath = sPath .. ":/bin" shell.setPath(sPath) - + if not fs.exists("/.sPhone/autorun") then fs.makeDir("/.sPhone/autorun") end - + term.setBackgroundColor(colors.white) term.clear() - term.setCursorPos(1,1) + term.setCursorPos(1, 1) for k, v in pairs(fs.list("/.sPhone/autorun")) do term.setTextColor(colors.black) - if not fs.isDir("/.sPhone/autorun/"..v) then + if not fs.isDir("/.sPhone/autorun/" .. v) then if not sPhone.safeMode then - local f = fs.open("/.sPhone/autorun/"..v,"r") + local f = fs.open("/.sPhone/autorun/" .. v, "r") local script = f.readAll() f.close() - print("Loading script "..v) - local ok, err = pcall(function() setfenv(loadstring(script),getfenv())() end) + print("Loading script " .. v) + local ok, err = pcall(function() setfenv(loadstring(script), getfenv())() end) if not ok then term.setTextColor(colors.red) - print("Script error: "..v..": "..err) - fs.move("/.sPhone/autorun/"..v, "/.sPhone/autorun/disabled/"..v) + print("Script error: " .. v .. ": " .. err) + fs.move("/.sPhone/autorun/" .. v, "/.sPhone/autorun/disabled/" .. v) term.setTextColor(colors.blue) - print(v.." disabled to prevent errors") + print(v .. " disabled to prevent errors") end else - print("Script "..v.." not loaded because Safe Mode") + print("Script " .. v .. " not loaded because Safe Mode") end end end - - if config.read("/.sPhone/config/sPhone","username") then - sPhone.user = config.read("/.sPhone/config/sPhone","username") + + if config.read("/.sPhone/config/sPhone", "username") then + sPhone.user = config.read("/.sPhone/config/sPhone", "username") end - + if not fs.exists("/.sPhone/config/sPhone") then - config.write("/.sPhone/config/sPhone","devMode",false) + config.write("/.sPhone/config/sPhone", "devMode", false) end - - sPhone.devMode = config.read("/.sPhone/config/sPhone","devMode") - + + sPhone.devMode = config.read("/.sPhone/config/sPhone", "devMode") + if sPhone.devMode then sPhone.crash = crash end - + crash = nil - + function os.version() - return "sPhone "..sPhone.version + return "sPhone " .. sPhone.version end - + function sPhone.getSize() return term.getSize() end - + local fileTheme = "/.sPhone/config/theme" if fs.exists(fileTheme) then sPhone.theme["header"] = (config.read(fileTheme, "header") or sPhone.theme["header"]) sPhone.theme["headerText"] = (config.read(fileTheme, "headerText") or sPhone.theme["headerText"]) - sPhone.theme["text"] = (config.read(fileTheme, "text") or sPhone.theme["text"]) + sPhone.theme["text"] = (config.read(fileTheme, "text") or sPhone.theme["text"]) sPhone.theme["background"] = (config.read(fileTheme, "background") or sPhone.theme["background"]) sPhone.theme["backgroundColor"] = (config.read(fileTheme, "backgroundColor") or sPhone.theme["backgroundColor"]) sPhone.theme["window.background"] = (config.read(fileTheme, "window.background") or sPhone.theme["window.background"]) @@ -140,18 +140,18 @@ local function kernel(...) config.write(fileTheme, k, v) end end - + function sPhone.applyTheme(id, value) if not value or not id then - error("bad arguement: double expected, got nil",2) + error("bad arguement: double expected, got nil", 2) end sPhone.theme[id] = value config.write(fileTheme, id, value) end - + function sPhone.getTheme(id) if not id then - error("bad arguement: double expected, got nil",2) + error("bad arguement: double expected, got nil", 2) end local n = config.read(fileTheme, id) if n then @@ -159,35 +159,35 @@ local function kernel(...) end return sPhone.defaultTheme[id] end - + function sPhone.setDefaultApp(app, path) if not path then - error("got nil",2) + error("got nil", 2) end - + sPhone.defaultApps[app] = path - config.write("/.sPhone/config/defaultApps",app,path) + config.write("/.sPhone/config/defaultApps", app, path) end - + function sPhone.getDefaultApp(app) if not app then - error("got nil",2) + error("got nil", 2) end - - local n = config.read("/.sPhone/config/defaultApps",app) + + local n = config.read("/.sPhone/config/defaultApps", app) return n end - + if not fs.exists("/.sPhone/config/defaultApps") then - sPhone.setDefaultApp("home","sphone.home") + sPhone.setDefaultApp("home", "sphone.home") end - + function string.getExtension(name) local ext = "" local exten = false name = string.reverse(name) for i = 1, #name do - local s = string.sub(name,i,i) + local s = string.sub(name, i, i) if s == "." then ch = i - 1 exten = true @@ -201,7 +201,7 @@ local function kernel(...) return nil end end - + function sPhone.list(path, opt) opt = opt or {} opt.bg1 = opt.bg1 or sPhone.getTheme("backgroundColor") @@ -234,14 +234,14 @@ local function kernel(...) else flist = opt.list end - + local function pair(tab) if opt.pairs then return pairs(tab) end return ipairs(tab) end - + for i, v in pair(flist) do if fs.isDir(fs.combine(path, v)) then table.insert(dirs, v) @@ -257,7 +257,7 @@ local function kernel(...) for i, v in pair(files) do table.insert(items, v) end - + if opt.pairs then for k, v in pairs(flist) do cho[v] = k @@ -267,7 +267,7 @@ local function kernel(...) end rebuild() local setVisible = term.current().setVisible - or function()end + or function() end local function redraw() w, h = term.getSize() setVisible(false) @@ -278,11 +278,11 @@ local function kernel(...) if str then term.setCursorPos(2, 1 + i - scroll) local isDir - if not opt.pairs then + if not opt.pairs then isDir = fs.isDir(fs.combine(path, str)) - else - isDir = false - end + else + isDir = false + end term.setTextColor(isDir and opt.fg1b or opt.fg1) local _w = w - (isDir and 2 or 1) if #str > _w then @@ -318,7 +318,7 @@ local function kernel(...) end while true do redraw() - local ev = {os.pullEventRaw()} + local ev = { os.pullEventRaw() } if ev[1] == "terminate" then return nil elseif ev[1] == "mouse_scroll" and ev[4] > 1 then @@ -359,301 +359,286 @@ local function kernel(...) scroll = math.min(math.max(0, scroll), math.max(0, #items - h + 1)) end end - - function sPhone.read( _sReplaceChar, _tHistory, _fnComplete, _MouseEvent, _presetInput ) - term.setCursorBlink( true ) - local sLine = _presetInput - + function sPhone.read(_sReplaceChar, _tHistory, _fnComplete, _MouseEvent, _presetInput) + term.setCursorBlink(true) + + local sLine = _presetInput + if type(sLine) ~= "string" then sLine = "" end local nPos = #sLine - local nHistoryPos + local nHistoryPos local _MouseX local _MouseY local param local sEvent local usedMouse = false - if _sReplaceChar then - _sReplaceChar = string.sub( _sReplaceChar, 1, 1 ) - end + if _sReplaceChar then + _sReplaceChar = string.sub(_sReplaceChar, 1, 1) + end - local tCompletions - local nCompletion - local function recomplete() - if _fnComplete and nPos == string.len(sLine) then - tCompletions = _fnComplete( sLine ) - if tCompletions and #tCompletions > 0 then - nCompletion = 1 - else - nCompletion = nil - end - else - tCompletions = nil - nCompletion = nil - end - end + local tCompletions + local nCompletion + local function recomplete() + if _fnComplete and nPos == string.len(sLine) then + tCompletions = _fnComplete(sLine) + if tCompletions and #tCompletions > 0 then + nCompletion = 1 + else + nCompletion = nil + end + else + tCompletions = nil + nCompletion = nil + end + end - local function uncomplete() - tCompletions = nil - nCompletion = nil - end + local function uncomplete() + tCompletions = nil + nCompletion = nil + end - local w = term.getSize() - local sx = term.getCursorPos() + local w = term.getSize() + local sx = term.getCursorPos() - local function redraw( _bClear ) - local nScroll = 0 - if sx + nPos >= w then - nScroll = (sx + nPos) - w - end + local function redraw(_bClear) + local nScroll = 0 + if sx + nPos >= w then + nScroll = (sx + nPos) - w + end - local cx,cy = term.getCursorPos() - term.setCursorPos( sx, cy ) - local sReplace = (_bClear and " ") or _sReplaceChar - if sReplace then - term.write( string.rep( sReplace, math.max( string.len(sLine) - nScroll, 0 ) ) ) - else - term.write( string.sub( sLine, nScroll + 1 ) ) - end + local cx, cy = term.getCursorPos() + term.setCursorPos(sx, cy) + local sReplace = (_bClear and " ") or _sReplaceChar + if sReplace then + term.write(string.rep(sReplace, math.max(string.len(sLine) - nScroll, 0))) + else + term.write(string.sub(sLine, nScroll + 1)) + end - if nCompletion then - local sCompletion = tCompletions[ nCompletion ] - local oldText, oldBg - if not _bClear then - oldText = term.getTextColor() - oldBg = term.getBackgroundColor() - term.setTextColor( colors.white ) - term.setBackgroundColor( colors.gray ) - end - if sReplace then - term.write( string.rep( sReplace, string.len( sCompletion ) ) ) - else - term.write( sCompletion ) - end - if not _bClear then - term.setTextColor( oldText ) - term.setBackgroundColor( oldBg ) - end - end + if nCompletion then + local sCompletion = tCompletions[nCompletion] + local oldText, oldBg + if not _bClear then + oldText = term.getTextColor() + oldBg = term.getBackgroundColor() + term.setTextColor(colors.white) + term.setBackgroundColor(colors.gray) + end + if sReplace then + term.write(string.rep(sReplace, string.len(sCompletion))) + else + term.write(sCompletion) + end + if not _bClear then + term.setTextColor(oldText) + term.setBackgroundColor(oldBg) + end + end - term.setCursorPos( sx + nPos - nScroll, cy ) - end - - local function clear() - redraw( true ) - end + term.setCursorPos(sx + nPos - nScroll, cy) + end - recomplete() - redraw() + local function clear() + redraw(true) + end - local function acceptCompletion() - if nCompletion then - -- Clear - clear() + recomplete() + redraw() - -- Find the common prefix of all the other suggestions which start with the same letter as the current one - local sCompletion = tCompletions[ nCompletion ] - sLine = sLine .. sCompletion - nPos = string.len( sLine ) + local function acceptCompletion() + if nCompletion then + -- Clear + clear() - -- Redraw - recomplete() - redraw() - end - end - while true do - sEvent, param,_MouseX,_MouseY = os.pullEvent() - if sEvent == "char" then - -- Typed key - clear() - sLine = string.sub( sLine, 1, nPos ) .. param .. string.sub( sLine, nPos + 1 ) - nPos = nPos + 1 - recomplete() - redraw() + -- Find the common prefix of all the other suggestions which start with the same letter as the current one + local sCompletion = tCompletions[nCompletion] + sLine = sLine .. sCompletion + nPos = string.len(sLine) - elseif sEvent == "paste" then - -- Pasted text - clear() - sLine = string.sub( sLine, 1, nPos ) .. param .. string.sub( sLine, nPos + 1 ) - nPos = nPos + string.len( param ) - recomplete() - redraw() - - elseif sEvent == "key" then - if param == keys.enter then - -- Enter - if nCompletion then - clear() - uncomplete() - redraw() - end - break - - elseif param == keys.left then - -- Left - if nPos > 0 then - clear() - nPos = nPos - 1 - recomplete() - redraw() - end - - elseif param == keys.right then - -- Right - if nPos < string.len(sLine) then - -- Move right - clear() - nPos = nPos + 1 - recomplete() - redraw() - else - -- Accept autocomplete - acceptCompletion() - end - - elseif param == keys.up or param == keys.down then - -- Up or down - if nCompletion then - -- Cycle completions - clear() - if param == keys.up then - nCompletion = nCompletion - 1 - if nCompletion < 1 then - nCompletion = #tCompletions - end - elseif param == keys.down then - nCompletion = nCompletion + 1 - if nCompletion > #tCompletions then - nCompletion = 1 - end - end - redraw() - - elseif _tHistory then - -- Cycle history - clear() - if param == keys.up then - -- Up - if nHistoryPos == nil then - if #_tHistory > 0 then - nHistoryPos = #_tHistory - end - elseif nHistoryPos > 1 then - nHistoryPos = nHistoryPos - 1 - end - else - -- Down - if nHistoryPos == #_tHistory then - nHistoryPos = nil - elseif nHistoryPos ~= nil then - nHistoryPos = nHistoryPos + 1 - end - end - if nHistoryPos then - sLine = _tHistory[nHistoryPos] - nPos = string.len( sLine ) - else - sLine = "" - nPos = 0 - end - uncomplete() - redraw() - - end - - elseif param == keys.backspace then - -- Backspace - if nPos > 0 then - clear() - sLine = string.sub( sLine, 1, nPos - 1 ) .. string.sub( sLine, nPos + 1 ) - nPos = nPos - 1 - recomplete() - redraw() - end - - elseif param == keys.home then - -- Home - if nPos > 0 then - clear() - nPos = 0 - recomplete() - redraw() - end - - elseif param == keys.delete then - -- Delete - if nPos < string.len(sLine) then - clear() - sLine = string.sub( sLine, 1, nPos ) .. string.sub( sLine, nPos + 2 ) - recomplete() - redraw() - end - - elseif param == keys["end"] then - -- End - if nPos < string.len(sLine ) then - clear() - nPos = string.len(sLine) - recomplete() - redraw() - end - - elseif param == keys.tab then - -- Tab (accept autocomplete) - acceptCompletion() - - end - - elseif sEvent == "term_resize" then - -- Terminal resized - w = term.getSize() - redraw() - - elseif sEvent == "mouse_click" and _MouseEvent then + -- Redraw + recomplete() + redraw() + end + end + while true do + sEvent, param, _MouseX, _MouseY = os.pullEvent() + if sEvent == "char" then + -- Typed key + clear() + sLine = string.sub(sLine, 1, nPos) .. param .. string.sub(sLine, nPos + 1) + nPos = nPos + 1 + recomplete() + redraw() + elseif sEvent == "paste" then + -- Pasted text + clear() + sLine = string.sub(sLine, 1, nPos) .. param .. string.sub(sLine, nPos + 1) + nPos = nPos + string.len(param) + recomplete() + redraw() + elseif sEvent == "key" then + if param == keys.enter then + -- Enter if nCompletion then - clear() - uncomplete() - redraw() - end - usedMouse = true + clear() + uncomplete() + redraw() + end break - end - end + elseif param == keys.left then + -- Left + if nPos > 0 then + clear() + nPos = nPos - 1 + recomplete() + redraw() + end + elseif param == keys.right then + -- Right + if nPos < string.len(sLine) then + -- Move right + clear() + nPos = nPos + 1 + recomplete() + redraw() + else + -- Accept autocomplete + acceptCompletion() + end + elseif param == keys.up or param == keys.down then + -- Up or down + if nCompletion then + -- Cycle completions + clear() + if param == keys.up then + nCompletion = nCompletion - 1 + if nCompletion < 1 then + nCompletion = #tCompletions + end + elseif param == keys.down then + nCompletion = nCompletion + 1 + if nCompletion > #tCompletions then + nCompletion = 1 + end + end + redraw() + elseif _tHistory then + -- Cycle history + clear() + if param == keys.up then + -- Up + if nHistoryPos == nil then + if #_tHistory > 0 then + nHistoryPos = #_tHistory + end + elseif nHistoryPos > 1 then + nHistoryPos = nHistoryPos - 1 + end + else + -- Down + if nHistoryPos == #_tHistory then + nHistoryPos = nil + elseif nHistoryPos ~= nil then + nHistoryPos = nHistoryPos + 1 + end + end + if nHistoryPos then + sLine = _tHistory[nHistoryPos] + nPos = string.len(sLine) + else + sLine = "" + nPos = 0 + end + uncomplete() + redraw() + end + elseif param == keys.backspace then + -- Backspace + if nPos > 0 then + clear() + sLine = string.sub(sLine, 1, nPos - 1) .. string.sub(sLine, nPos + 1) + nPos = nPos - 1 + recomplete() + redraw() + end + elseif param == keys.home then + -- Home + if nPos > 0 then + clear() + nPos = 0 + recomplete() + redraw() + end + elseif param == keys.delete then + -- Delete + if nPos < string.len(sLine) then + clear() + sLine = string.sub(sLine, 1, nPos) .. string.sub(sLine, nPos + 2) + recomplete() + redraw() + end + elseif param == keys["end"] then + -- End + if nPos < string.len(sLine) then + clear() + nPos = string.len(sLine) + recomplete() + redraw() + end + elseif param == keys.tab then + -- Tab (accept autocomplete) + acceptCompletion() + end + elseif sEvent == "term_resize" then + -- Terminal resized + w = term.getSize() + redraw() + elseif sEvent == "mouse_click" and _MouseEvent then + if nCompletion then + clear() + uncomplete() + redraw() + end + usedMouse = true + break + end + end - local cx, cy = term.getCursorPos() - term.setCursorBlink( false ) - term.setCursorPos( w + 1, cy ) - print() + local cx, cy = term.getCursorPos() + term.setCursorBlink(false) + term.setCursorPos(w + 1, cy) + print() if sEvent == "mouse_click" then return sLine, param, _MouseX, _MouseY end - return sLine + return sLine end - + local function clear() term.setBackgroundColor(sPhone.theme["backgroundColor"]) term.clear() - term.setCursorPos(1,1) + term.setCursorPos(1, 1) term.setTextColor(sPhone.theme["text"]) end - + sPhone.forceShutdown = os.shutdown sPhone.forceReboot = os.reboot - + function os.shutdown() local w, h = term.getSize() local text = "Shutting down" - local x = math.ceil(w/2)-math.ceil(#text/2)+1 - local y = math.ceil(h/2) + local x = math.ceil(w / 2) - math.ceil(#text / 2) + 1 + local y = math.ceil(h / 2) sPhone.inHome = false os.pullEvent = os.pullEventRaw local function printMsg(color) term.setBackgroundColor(color) term.setTextColor(colors.white) term.clear() - term.setCursorPos(x,y) + term.setCursorPos(x, y) print(text) sleep(0.1) end @@ -664,19 +649,19 @@ local function kernel(...) sleep(0.6) sPhone.forceShutdown() end - + function os.reboot() local w, h = term.getSize() local text = "Rebooting" - local x = math.ceil(w/2)-math.ceil(#text/2)+1 - local y = math.ceil(h/2) + local x = math.ceil(w / 2) - math.ceil(#text / 2) + 1 + local y = math.ceil(h / 2) sPhone.inHome = false os.pullEvent = os.pullEventRaw local function printMsg(color) term.setBackgroundColor(color) term.setTextColor(colors.white) term.clear() - term.setCursorPos(x,y) + term.setCursorPos(x, y) print(text) sleep(0.1) end @@ -687,200 +672,199 @@ local function kernel(...) sleep(0.6) sPhone.forceReboot() end - - function sPhone.header(title, butt) - + + function sPhone.header(title, butt) if not title then title = "sPhone" end local w, h = term.getSize() - paintutils.drawLine(1,1,w,1, sPhone.theme["header"]) + paintutils.drawLine(1, 1, w, 1, sPhone.theme["header"]) term.setTextColor(sPhone.theme["headerText"]) - term.setCursorPos(1,1) - write(" "..title) - term.setCursorPos(w,1) + term.setCursorPos(1, 1) + write(" " .. title) + term.setCursorPos(w, 1) if butt then write(butt) end term.setBackgroundColor(sPhone.theme["backgroundColor"]) term.setTextColor(sPhone.theme["text"]) - term.setCursorPos(1,3) - end - - function sPhone.menu(items, title, closeButton) - local function cprint(text) - if type(text) ~= 'table' then - text = {text} - end - - local w, h = term.getSize() - - for i=1,#text do - local x, y = term.getCursorPos() - term.setCursorPos(math.floor(w/2)-math.floor(text[i]:len()/2), y) - print(text[i]) - end - end - local function clear() - term.clear() - term.setCursorPos(1, 1) - end - - local termWidth, termHeight = term.getSize() - local drawSize = termHeight - 2 - - local function maxPages() - local itemCount = #items - local pageCount = 0 - while itemCount > 0 do - itemCount = itemCount - drawSize - pageCount = pageCount + 1 - end - return pageCount + term.setCursorPos(1, 3) end - - local function iif(cond, trueval, falseval) - if cond then - return trueval - else - return falseval - end - end - - local function pagedItems() - local ret = {} - for i = 1, maxPages() do - local tmp = {} - local nElements = 0 - for j = drawSize*(i-1)+1, iif(drawSize*(i+1) > #items, #items, drawSize*(i+1)) do - if nElements < drawSize then - table.insert(tmp, items[j]) - nElements = nElements + 1 - end + + function sPhone.menu(items, title, closeButton) + local function cprint(text) + if type(text) ~= 'table' then + text = { text } end - table.insert(ret, tmp) - end - return ret - end - - local selected = 1 - if start then - selected = start - end - local page = 1 - - local function redraw() - term.setBackgroundColor(sPhone.theme["backgroundColor"]) - term.setTextColor(sPhone.theme["text"]) - term.clear() - term.setCursorPos(1,1) - if not title then - title = "" - end - sPhone.header(title,closeButton) - term.setCursorPos(1,3) - if moreTitle then - head = moreTitle - else - head = {} - if not allowNil or allowNil == true then - --head[3] = 'Terminate to cancel.' + + local w, h = term.getSize() + + for i = 1, #text do + local x, y = term.getCursorPos() + term.setCursorPos(math.floor(w / 2) - math.floor(text[i]:len() / 2), y) + print(text[i]) end end - for i=1,#head do - print(head[i]) + local function clear() + term.clear() + term.setCursorPos(1, 1) end - if maxPages() > 1 then - pages = "<- (page "..page.." of "..maxPages()..") ->" - print(pages) + + local termWidth, termHeight = term.getSize() + local drawSize = termHeight - 2 + + local function maxPages() + local itemCount = #items + local pageCount = 0 + while itemCount > 0 do + itemCount = itemCount - drawSize + pageCount = pageCount + 1 + end + return pageCount end - for i = 1, #pagedItems()[page] do - if selected == drawSize*(page-1)+i then - term.setBackgroundColor(sPhone.theme["backgroundColor"]) - term.setTextColor(sPhone.theme["text"]) + + local function iif(cond, trueval, falseval) + if cond then + return trueval else - term.setBackgroundColor(sPhone.theme["backgroundColor"]) - term.setTextColor(sPhone.theme["text"]) + return falseval end - term.clearLine() - cprint(iif(selected == drawSize*(page-1)+i,"","").." "..pagedItems()[page][i]) + end + + local function pagedItems() + local ret = {} + for i = 1, maxPages() do + local tmp = {} + local nElements = 0 + for j = drawSize * (i - 1) + 1, iif(drawSize * (i + 1) > #items, #items, drawSize * (i + 1)) do + if nElements < drawSize then + table.insert(tmp, items[j]) + nElements = nElements + 1 + end + end + table.insert(ret, tmp) + end + return ret + end + + local selected = 1 + if start then + selected = start + end + local page = 1 + + local function redraw() term.setBackgroundColor(sPhone.theme["backgroundColor"]) term.setTextColor(sPhone.theme["text"]) + term.clear() + term.setCursorPos(1, 1) + if not title then + title = "" + end + sPhone.header(title, closeButton) + term.setCursorPos(1, 3) + if moreTitle then + head = moreTitle + else + head = {} + if not allowNil or allowNil == true then + --head[3] = 'Terminate to cancel.' + end + end + for i = 1, #head do + print(head[i]) + end + if maxPages() > 1 then + pages = "<- (page " .. page .. " of " .. maxPages() .. ") ->" + print(pages) + end + for i = 1, #pagedItems()[page] do + if selected == drawSize * (page - 1) + i then + term.setBackgroundColor(sPhone.theme["backgroundColor"]) + term.setTextColor(sPhone.theme["text"]) + else + term.setBackgroundColor(sPhone.theme["backgroundColor"]) + term.setTextColor(sPhone.theme["text"]) + end + term.clearLine() + cprint(iif(selected == drawSize * (page - 1) + i, "", "") .. " " .. pagedItems()[page][i]) + term.setBackgroundColor(sPhone.theme["backgroundColor"]) + term.setTextColor(sPhone.theme["text"]) + end + end + + local function changePage(pW) + if pW == 1 and page < maxPages() then + page = page + 1 + if selected + drawSize > #items then + selected = #items + else + selected = selected + drawSize + end + elseif pW == -1 and page > 1 then + page = page - 1 + if selected - drawSize < 1 then + selected = 1 + else + selected = selected - drawSize + end + end + end + + redraw() + while true do + local eventData = { os.pullEventRaw() } + if eventData[1] == 'mouse_click' then + if eventData[4] == 1 and eventData[3] == termWidth then + return false, 0 + elseif eventData[4] > 2 then + clear() + selected = (eventData[4] - 3 + ((page - 1) * drawSize)) + 1 + if selected then + return items[selected], selected + end + end + end end end - local function changePage(pW) - if pW == 1 and page < maxPages() then - page = page + 1 - if selected + drawSize > #items then - selected = #items - else - selected = selected + drawSize - end - elseif pW == -1 and page > 1 then - page = page - 1 - if selected - drawSize < 1 then - selected = 1 - else - selected = selected - drawSize - end - end - end - - redraw() - while true do - local eventData = {os.pullEventRaw()} - if eventData[1] == 'mouse_click' then - if eventData[4] == 1 and eventData[3] == termWidth then - return false, 0 - elseif eventData[4] > 2 then - clear() - selected = (eventData[4]-3+((page-1)*drawSize))+1 - if selected then - return items[selected], selected - end - end - end - end -end - function sPhone.yesNo(title, desc, hideUser) term.setCursorBlink(false) term.setBackgroundColor(sPhone.theme["backgroundColor"]) term.clear() - term.setCursorPos(1,1) + term.setCursorPos(1, 1) term.setTextColor(sPhone.theme["text"]) local w, h = term.getSize() - paintutils.drawLine(1,1,w,1, sPhone.theme["header"]) + paintutils.drawLine(1, 1, w, 1, sPhone.theme["header"]) term.setTextColor(sPhone.theme["headerText"]) - term.setCursorPos(1,1) + term.setCursorPos(1, 1) if not hideUser then if not sPhone.user then write(" sPhone") else - write(" "..sPhone.user) + write(" " .. sPhone.user) end end - term.setCursorPos(1,3) + term.setCursorPos(1, 3) term.setBackgroundColor(sPhone.theme["backgroundColor"]) term.setTextColor(sPhone.theme["text"]) - visum.align("center", " "..title, false, 3) + visum.align("center", " " .. title, false, 3) if desc then - term.setCursorPos(2,6) + term.setCursorPos(2, 6) print(desc) end paintutils.drawFilledBox(3, 16, 9, 18, colors.green) paintutils.drawFilledBox(18, 16, 24, 18, colors.red) term.setTextColor(colors.white) - term.setCursorPos(5,17) + term.setCursorPos(5, 17) term.setBackgroundColor(colors.green) write("Yes") - term.setCursorPos(20,17) + term.setCursorPos(20, 17) term.setBackgroundColor(colors.red) write("No") while true do - local _,_,x,y = os.pullEvent("mouse_click") + local _, _, x, y = os.pullEvent("mouse_click") if (x > 2 and y > 15) and (x < 10 and y < 19) then return true elseif (x > 17 and y > 15) and (x < 25 and y < 19) then @@ -888,7 +872,7 @@ end end end end - + function sPhone.winOk(fmessage, smessage, bg, side, text, button) if not fmessage then fmessage = "" @@ -932,11 +916,11 @@ end term.setCursorPos(14 - math.ceil(#smessage / 2), 8) write(smessage) end - term.setCursorPos(13,10) + term.setCursorPos(13, 10) term.setBackgroundColor(button) write("Ok") while true do - local e, k, x,y = os.pullEvent() + local e, k, x, y = os.pullEvent() if e == "mouse_click" then if y == 10 then if x == 13 or x == 14 then @@ -950,7 +934,7 @@ end end end end - + function sPhone.colorPicker(message, old) -- From Impulse local current = math.log(old) / math.log(2) -- first line is already code wizardry @@ -958,97 +942,97 @@ end term.setBackgroundColour(sPhone.theme["backgroundColor"]) term.clear() sPhone.header(message) - term.setCursorPos(2,5) + term.setCursorPos(2, 5) term.setTextColor(colors.white) term.setBackgroundColor(colors.lime) write(" Ok ") - term.setCursorPos(7,5) + term.setCursorPos(7, 5) term.setTextColor(colors.white) term.setBackgroundColor(colors.red) write(" Cancel ") term.setTextColor(colors.black) term.setCursorPos(2, 3) for i = 0, 15 do - term.setBackgroundColour(2^i) + term.setBackgroundColour(2 ^ i) term.write(i == current and "#" or ":") end end while true do redraw() - local ev = {os.pullEvent()} + local ev = { os.pullEvent() } if ev[1] == "key" and ev[2] == keys.enter then - return 2^current + return 2 ^ current elseif ev[1] == "mouse_click" then if ev[4] == 3 and ev[3] >= 2 and ev[3] <= 17 then current = ev[3] - 2 % 16 elseif ev[4] == 5 and ev[3] >= 2 and ev[3] <= 6 then - return 2^current + return 2 ^ current elseif ev[4] == 5 and ev[3] >= 7 and ev[3] <= 14 then return old end end end end - + sPhone.colourPicker = sPhone.colorPicker -- For UK - + function sPhone.install(spk) if not fs.exists("/.sPhone/config/spklist") then - local f = fs.open("/.sPhone/config/spklist","w") + local f = fs.open("/.sPhone/config/spklist", "w") f.write("{}") f.close() end if string.getExtension(spk) == "spk" then if fs.exists(spk) and not fs.isDir(spk) then - local f = fs.open(spk,"r") + local f = fs.open(spk, "r") local script = f.readAll() f.close() script = textutils.unserialize(script) if not script then - error("spk corrupted",2) + error("spk corrupted", 2) end - - local function writeFile(patha,contenta) - local file = fs.open(patha,"w") + + local function writeFile(patha, contenta) + local file = fs.open(patha, "w") file.write(contenta) file.close() end - function writeDown(inputa,dira) - for i,v in pairs(inputa) do - if type(v) == "table" then - writeDown(v,dira.."/"..i) - elseif type(v) == "string" then - writeFile(dira.."/"..i,v) - end - end + function writeDown(inputa, dira) + for i, v in pairs(inputa) do + if type(v) == "table" then + writeDown(v, dira .. "/" .. i) + elseif type(v) == "string" then + writeFile(dira .. "/" .. i, v) + end + end end - + local _config = textutils.unserialize(script.config) if not _config.id then - error("SPK: id not found",2) + error("SPK: id not found", 2) end if not _config.main then - error("SPK: main not found",2) + error("SPK: main not found", 2) end - writeDown(textutils.unserialize(script.files),"/.sPhone/apps/spk/".._config.id.."/files") - local f = fs.open("/.sPhone/apps/spk/".._config.id.."/.spk","w") + writeDown(textutils.unserialize(script.files), "/.sPhone/apps/spk/" .. _config.id .. "/files") + local f = fs.open("/.sPhone/apps/spk/" .. _config.id .. "/.spk", "w") f.write(textutils.serialize(_config)) f.close() - local f = fs.open("/.sPhone/config/spklist","r") + local f = fs.open("/.sPhone/config/spklist", "r") local lists = f.readAll() f.close() lists = textutils.unserialize(lists) if not lists then - error("Cannot open config",2) + error("Cannot open config", 2) end - + if not _config.name then _config.name = _config.id end - + lists[_config.id] = _config.name - - local f = fs.open("/.sPhone/config/spklist","w") + + local f = fs.open("/.sPhone/config/spklist", "w") f.write(textutils.serialize(lists)) f.close() return true, _config.id @@ -1059,84 +1043,85 @@ end return false, "not a spk file" end end - + function sPhone.launch(spk) if not fs.exists("/.sPhone/config/spklist") then - local f = fs.open("/.sPhone/config/spklist","w") + local f = fs.open("/.sPhone/config/spklist", "w") f.write("{}") f.close() end - local f = fs.open("/.sPhone/config/spklist","r") + local f = fs.open("/.sPhone/config/spklist", "r") local lists = f.readAll() f.close() lists = textutils.unserialize(lists) if not lists then - error("Cannot open config",2) + error("Cannot open config", 2) end - + if not lists[spk] then return false, "not installed" end - - if not fs.exists("/.sPhone/apps/spk/"..spk.."/.spk") then + + if not fs.exists("/.sPhone/apps/spk/" .. spk .. "/.spk") then return false, "Invalid SPK, .spk not found" end - - local f = fs.open("/.sPhone/apps/spk/"..spk.."/.spk","r") + + local f = fs.open("/.sPhone/apps/spk/" .. spk .. "/.spk", "r") local script = f.readAll() f.close() _config = textutils.unserialize(script) if not script then return false, "config corrupted" end - + local result = {} local ok, err = pcall(function() - result = {setfenv(loadfile(fs.combine("/.sPhone/apps/spk",_config.id.."/files/".._config.main)), setmetatable({ - spk = { - getName = function() - return (_config.name or nil) - end, - - getID = function() - return (_config.id or nil) - end, - - getPath = function() - return "/.sPhone/apps/spk/".._config.id - end, - - getDataPath = function() - return "/.sPhone/apps/spk/".._config.id.."/data" - end, - - getAuthor = function() - return (_config.author or nil) - end, - - getVersion = function() - return (_config.version or nil) - end, - - getType = function() - return (_config.type or nil) - end, - - open = function(file, mode) - return fs.open("/.sPhone/apps/spk/".._config.id.."/data/"..file,mode) - end, - }, - string = string, - sPhone = sPhone, - }, {__index = getfenv()}))()} + result = { setfenv(loadfile(fs.combine("/.sPhone/apps/spk", _config.id .. "/files/" .. _config.main)), + setmetatable({ + spk = { + getName = function() + return (_config.name or nil) + end, + + getID = function() + return (_config.id or nil) + end, + + getPath = function() + return "/.sPhone/apps/spk/" .. _config.id + end, + + getDataPath = function() + return "/.sPhone/apps/spk/" .. _config.id .. "/data" + end, + + getAuthor = function() + return (_config.author or nil) + end, + + getVersion = function() + return (_config.version or nil) + end, + + getType = function() + return (_config.type or nil) + end, + + open = function(file, mode) + return fs.open("/.sPhone/apps/spk/" .. _config.id .. "/data/" .. file, mode) + end, + }, + string = string, + sPhone = sPhone, + }, { __index = getfenv() }))() } end) - + if not ok then return false, err end return true, result end - + local function home() sPhone.inHome = true local errorCount = 0 @@ -1146,20 +1131,18 @@ end "sphone.home", } while true do - - - if not config.read("/.sPhone/config/spklist","sphone.home") then + if not config.read("/.sPhone/config/spklist", "sphone.home") then sPhone.install("/.sPhone/apps/home.spk") end os.pullEvent = os.oldPullEvent term.setBackgroundColor(colors.black) term.setTextColor(colors.white) term.clear() - term.setCursorPos(1,1) + term.setCursorPos(1, 1) if errorCount >= 5 and errorCount < 10 then homeID = "sphone.home" elseif errorCount >= 10 then - error("Cannot load home: "..err,0) + error("Cannot load home: " .. err, 0) else homeID = sPhone.getDefaultApp("home") end @@ -1170,24 +1153,23 @@ end else homeID = "sphone.home" end - temp.set("homePID",task.add(function() - ok,err = sPhone.launch(homeID) + temp.set("homePID", task.add(function() + ok, err = sPhone.launch(homeID) end)) task.run() if not ok then errorCount = errorCount + 1 end sleep(0) - end sPhone.inHome = false end - + function login() - if config.read("/.sPhone/config/sPhone","lockEnabled") == nil then - config.write("/.sPhone/config/sPhone","lockEnabled",true) + if config.read("/.sPhone/config/sPhone", "lockEnabled") == nil then + config.write("/.sPhone/config/sPhone", "lockEnabled", true) end - local usingPW = config.read("/.sPhone/config/sPhone","lockEnabled") + local usingPW = config.read("/.sPhone/config/sPhone", "lockEnabled") if not usingPW then local old = os.pullEvent os.pullEvent = os.pullEventRaw @@ -1197,22 +1179,22 @@ end ["key"] = false, } while true do - local w,h = term.getSize() - local clockS = textutils.formatTime(os.time(), not config.read("/.sPhone/config/sPhone","format12time")) + local w, h = term.getSize() + local clockS = textutils.formatTime(os.time(), not config.read("/.sPhone/config/sPhone", "format12time")) term.setBackgroundColor(sPhone.theme["lock.background"]) term.clear() - term.setCursorPos(1,1) + term.setCursorPos(1, 1) sPhone.header(sPhone.user) term.setBackgroundColor(sPhone.theme["lock.background"]) term.setTextColor(sPhone.theme["lock.text"]) - term.setCursorPos(6,4) + term.setCursorPos(6, 4) bigfont.bigPrint(clockS) - visum.align("center"," Slide to unlock",false,h) + visum.align("center", " Slide to unlock", false, h) local clockUpdate = os.startTimer(1) - local e = {os.pullEvent()} + local e = { os.pullEvent() } if fEvents[e[1]] then os.pullEvent = old - break + break end end return @@ -1220,30 +1202,30 @@ end local old = os.pullEvent os.pullEvent = os.pullEventRaw sPhone.locked = true - if config.read("/.sPhone/config/sPhone","password") then + if config.read("/.sPhone/config/sPhone", "password") then while true do term.setBackgroundColor(sPhone.theme["lock.background"]) term.clear() - term.setCursorPos(1,1) + term.setCursorPos(1, 1) sPhone.header(sPhone.user) - paintutils.drawBox(7,9,20,11,sPhone.theme["lock.inputSide"]) + paintutils.drawBox(7, 9, 20, 11, sPhone.theme["lock.inputSide"]) if sPhone.wrongPassword then term.setTextColor(sPhone.theme["lock.error"]) term.setBackgroundColor(sPhone.theme["lock.background"]) - visum.align("center"," Wrong Password",false,13) + visum.align("center", " Wrong Password", false, 13) end term.setTextColor(sPhone.theme["lock.text"]) term.setBackgroundColor(sPhone.theme["lock.background"]) - visum.align("center"," Insert Password",false,7) - local loginTerm = window.create(term.native(), 8,10,12,1, true) - term.redirect(loginTerm) - term.setBackgroundColor(sPhone.theme["lock.inputBackground"]) - term.clear() - term.setCursorPos(1,1) - term.setTextColor(sPhone.theme["lock.inputText"]) + visum.align("center", " Insert Password", false, 7) + local loginTerm = window.create(term.native(), 8, 10, 12, 1, true) + term.redirect(loginTerm) + term.setBackgroundColor(sPhone.theme["lock.inputBackground"]) + term.clear() + term.setCursorPos(1, 1) + term.setTextColor(sPhone.theme["lock.inputText"]) local passwordLogin = read("*") - term.redirect(sPhone.mainTerm) - local fpw = config.read("/.sPhone/config/sPhone","password") + term.redirect(sPhone.mainTerm) + local fpw = config.read("/.sPhone/config/sPhone", "password") if sha256.sha256(passwordLogin) == fpw then sPhone.wrongPassword = false os.pullEvent = old @@ -1257,45 +1239,44 @@ end local pw local pwr local rServer - local password1,mouse,x,y + local password1, mouse, x, y local w, h = term.getSize() local skipped = false sPhone.firstBoot = true - - for k,v in ipairs(fs.list("/.sPhone/apps/system")) do - sPhone.install("/.sPhone/apps/system/"..v) + + for k, v in ipairs(fs.list("/.sPhone/apps/system")) do + sPhone.install("/.sPhone/apps/system/" .. v) end - + while not skipped do - term.setBackgroundColor(sPhone.theme["lock.background"]) term.clear() - term.setCursorPos(1,1) + term.setCursorPos(1, 1) sPhone.header("Setup") - paintutils.drawBox(7,9,20,11,sPhone.theme["lock.inputSide"]) + paintutils.drawBox(7, 9, 20, 11, sPhone.theme["lock.inputSide"]) if sPhone.wrongPassword then term.setTextColor(sPhone.theme["lock.error"]) term.setBackgroundColor(sPhone.theme["lock.background"]) - visum.align("center"," Wrong Password",false,13) + visum.align("center", " Wrong Password", false, 13) end term.setTextColor(sPhone.theme["lock.text"]) term.setBackgroundColor(sPhone.theme["lock.background"]) - visum.align("center"," Insert Password",false,7) + visum.align("center", " Insert Password", false, 7) local t = "Skip" - term.setCursorPos(w-#t+1,h) + term.setCursorPos(w - #t + 1, h) write(t) - local loginTerm = window.create(term.native(), 8,10,12,1, true) - term.redirect(loginTerm) - term.setBackgroundColor(sPhone.theme["lock.inputBackground"]) - term.clear() - term.setCursorPos(1,1) - term.setTextColor(sPhone.theme["lock.inputText"]) + local loginTerm = window.create(term.native(), 8, 10, 12, 1, true) + term.redirect(loginTerm) + term.setBackgroundColor(sPhone.theme["lock.inputBackground"]) + term.clear() + term.setCursorPos(1, 1) + term.setTextColor(sPhone.theme["lock.inputText"]) while true do - password1,mouse,x,y = sPhone.read("*",nil,nil,true) + password1, mouse, x, y = sPhone.read("*", nil, nil, true) if mouse then if y == h and (x >= 23 and x <= w) then skipped = true - config.write("/.sPhone/config/sPhone","lockEnabled",false) + config.write("/.sPhone/config/sPhone", "lockEnabled", false) break end else @@ -1306,24 +1287,24 @@ end if not skipped then term.setBackgroundColor(sPhone.theme["lock.background"]) term.clear() - term.setCursorPos(1,1) + term.setCursorPos(1, 1) sPhone.header("Setup") - paintutils.drawBox(7,9,20,11,sPhone.theme["lock.inputSide"]) + paintutils.drawBox(7, 9, 20, 11, sPhone.theme["lock.inputSide"]) term.setTextColor(sPhone.theme["lock.text"]) term.setBackgroundColor(sPhone.theme["lock.background"]) - visum.align("center"," Repeat",false,7) - local loginTerm = window.create(term.native(), 8,10,12,1, true) + visum.align("center", " Repeat", false, 7) + local loginTerm = window.create(term.native(), 8, 10, 12, 1, true) term.redirect(loginTerm) term.setBackgroundColor(sPhone.theme["lock.inputBackground"]) term.clear() - term.setCursorPos(1,1) + term.setCursorPos(1, 1) term.setTextColor(sPhone.theme["lock.inputText"]) local password2 = read("*") term.redirect(sPhone.mainTerm) if password1 == password2 then - config.write("/.sPhone/config/sPhone", "password",sha256.sha256(password1)) + config.write("/.sPhone/config/sPhone", "password", sha256.sha256(password1)) term.setTextColor(colors.lime) - visum.align("center"," Password set!",false,13) + visum.align("center", " Password set!", false, 13) sleep(2) break else @@ -1331,35 +1312,35 @@ end end end end - + local name - + term.setBackgroundColor(sPhone.theme["backgroundColor"]) term.clear() sPhone.header("Setup") - term.setCursorPos(1,1) + term.setCursorPos(1, 1) term.setTextColor(sPhone.theme["text"]) - term.setCursorPos(2,3) - visum.align("center","Username",false,3) - term.setCursorPos(2,5) + term.setCursorPos(2, 3) + visum.align("center", "Username", false, 3) + term.setCursorPos(2, 5) local newUsername = read() - config.write("/.sPhone/config/sPhone","username",newUsername) - + config.write("/.sPhone/config/sPhone", "username", newUsername) + if fs.exists("/.sPhone/config/sPhone") then - name = config.read("/.sPhone/config/sPhone","username") + name = config.read("/.sPhone/config/sPhone", "username") else name = "Guest" end - config.write("/.sPhone/config/sPhone","showUpdate",true) + config.write("/.sPhone/config/sPhone", "showUpdate", true) term.setBackgroundColor(sPhone.theme["backgroundColor"]) term.clear() sPhone.header("Setup") - term.setCursorPos(1,1) + term.setCursorPos(1, 1) term.setTextColor(sPhone.theme["text"]) sPhone.user = name - os.setComputerLabel(sPhone.user.."'s sPhone") - visum.align("center"," All Set!",false,3) - visum.align("center"," Have fun with sPhone",false,5) + os.setComputerLabel(sPhone.user .. "'s sPhone") + visum.align("center", " All Set!", false, 3) + visum.align("center", " Have fun with sPhone", false, 5) sleep(2) sPhone.locked = false sPhone.inHome = true @@ -1371,13 +1352,13 @@ end sPhone.lock = login sPhone.login = login - local showUpdate = config.read("/.sPhone/config/sPhone","showUpdate") + local showUpdate = config.read("/.sPhone/config/sPhone", "showUpdate") http.request("https://raw.githubusercontent.com/SertexTeam/sPhone/master/src/version") local newVersion local timeout = os.startTimer(2) while true do - local event,url, sourceText = os.pullEvent() + local event, url, sourceText = os.pullEvent() if event == "http_success" then newVersion = sourceText.readLine() sourceText.close() @@ -1387,33 +1368,32 @@ end break end end - + if newVersion ~= sPhone.version and showUpdate then sPhone.newUpdate = true else sPhone.newUpdate = false end - - if config.read("/.sPhone/config/sPhone","updated") then - for k,v in pairs(fs.list("/.sPhone/apps/system")) do - sPhone.install("/.sPhone/apps/system/"..v) + + if config.read("/.sPhone/config/sPhone", "updated") then + for k, v in pairs(fs.list("/.sPhone/apps/system")) do + sPhone.install("/.sPhone/apps/system/" .. v) end - config.write("/.sPhone/config/sPhone","updated",false) + config.write("/.sPhone/config/sPhone", "updated", false) end - - if config.read("/.sPhone/config/sPhone","showUpdate") == nil then - config.write("/.sPhone/config/sPhone","showUpdate", true) + + if config.read("/.sPhone/config/sPhone", "showUpdate") == nil then + config.write("/.sPhone/config/sPhone", "showUpdate", true) end - + login() if sPhone.newUpdate then - sPhone.winOk("New Update:",newVersion) + sPhone.winOk("New Update:", newVersion) end home() - end if not sPhone then - kernel({...}) + kernel({ ... }) else print("sPhone already started") end diff --git a/src/startup.lua b/src/startup.lua index 9990934..70659b0 100644 --- a/src/startup.lua +++ b/src/startup.lua @@ -1,6 +1,6 @@ -if not fs.exists("/.sPhone/init") then +if not fs.exists("/.sPhone/init.lua") then printError("sPhone not found") return end -shell.run("/.sPhone/init", "-s") \ No newline at end of file +shell.run("/.sPhone/init.lua", "-s") \ No newline at end of file diff --git a/src/system/vfs.lua b/src/system/vfs.lua index f0aadd9..3edc057 100644 --- a/src/system/vfs.lua +++ b/src/system/vfs.lua @@ -168,7 +168,7 @@ function fs.exists(path) return fs.getProxy(path).exists(fs.getProxiedPath(path)) end function fs.combine(path1, path2) - return nativefs.combine(path1, path2) + return nativefs.combine(path1, path2 or "") end function fs.getName(path) path = fs.cleanPath(path)