mirror of
https://github.com/IgorTimofeev/MineOS.git
synced 2026-09-12 19:51:02 +05:00
Чуть обновил прошивку для биоса
This commit is contained in:
parent
00c05c317d
commit
755d55cd38
101
EFI/Full.lua
101
EFI/Full.lua
@ -2,7 +2,7 @@
|
||||
|
||||
-- local component, computer, unicode = require("component"), require("computer"), require("unicode")
|
||||
|
||||
local stringsMain, stringsBootFromURL, stringsChangeLabel, stringKeyDown, stringsInit, stringsFilesystem, componentProxy, componentList, pullSignal, uptime, tableInsert, mathMax, mathMin, mathHuge = "MineOS EFI", "Internet boot", "Change label", "key_down", "/init.lua", "filesystem", component.proxy, component.list, computer.pullSignal, computer.uptime, table.insert, math.max, math.min, math.huge
|
||||
local stringsMain, stringsBootFromURL, stringsChangeLabel, stringKeyDown, stringsInit, stringsFilesystem, componentProxy, componentList, pullSignal, uptime, tableInsert, mathMax, mathMin, mathHuge, mathFloor = "MineOS EFI", "Internet recovery", "Change label", "key_down", "/init.lua", "filesystem", component.proxy, component.list, computer.pullSignal, computer.uptime, table.insert, math.max, math.min, math.huge, math.floor
|
||||
local colorsTitle, colorsBackground, colorsText, colorsSelectionBackground, colorsSelectionText, eeprom, gpu, internetAddress = 1, 0, 1, 1, 0, componentProxy(componentList("eeprom")()), componentProxy(componentList("gpu")()), componentList("internet")()
|
||||
|
||||
gpu.bind(componentList("screen")(), true)
|
||||
@ -16,7 +16,7 @@ elseif depth == 8 then
|
||||
colorsTitle, colorsBackground, colorsText, colorsSelectionBackground, colorsSelectionText = 0x2D2D2D, 0xE1E1E1, 0x878787, 0x878787, 0xE1E1E1
|
||||
end
|
||||
|
||||
local setBackground, setForeground, round, restrict =
|
||||
local setBackground, setForeground, restrict =
|
||||
function(color)
|
||||
if color ~= curentBackground then
|
||||
gpu.setBackground(color)
|
||||
@ -29,9 +29,6 @@ local setBackground, setForeground, round, restrict =
|
||||
currentForeground = color
|
||||
end
|
||||
end,
|
||||
function(n)
|
||||
return math.floor(n + 0.5)
|
||||
end,
|
||||
function(text, limit, skip)
|
||||
if #text < limit then
|
||||
text = text .. string.rep(" ", limit - #text)
|
||||
@ -48,7 +45,7 @@ local rectangle, centrizedText, menuElement =
|
||||
gpuFill(x, y, width, height, " ")
|
||||
end,
|
||||
function(y, foreground, text)
|
||||
local x = round(screenWidth / 2 - #text / 2)
|
||||
local x = mathFloor(screenWidth / 2 - #text / 2)
|
||||
setForeground(foreground)
|
||||
gpuSet(x, y, text)
|
||||
end,
|
||||
@ -60,24 +57,37 @@ local rectangle, centrizedText, menuElement =
|
||||
}
|
||||
end
|
||||
|
||||
local function status(y, titleText, statusText, needWait)
|
||||
y = y or round(screenHeight / 2 - 1)
|
||||
|
||||
local function title(yHalfer, titleText)
|
||||
y = mathFloor(screenHeight / 2 - yHalfer / 2)
|
||||
rectangle(1, 1, screenWidth, screenHeight, colorsBackground)
|
||||
centrizedText(y, colorsTitle, titleText)
|
||||
centrizedText(y + 2, colorsText, statusText or "")
|
||||
if needWait then
|
||||
repeat
|
||||
local event = pullSignal()
|
||||
until event == stringKeyDown or event == "touch"
|
||||
|
||||
return y + 2
|
||||
end
|
||||
|
||||
local function status(titleText, statusText, needWait)
|
||||
local lines = {}
|
||||
for line in statusText:gmatch("[^\r\n]+") do
|
||||
lines[#lines + 1] = line:gsub("\t", " ")
|
||||
end
|
||||
|
||||
local y = title(#lines, titleText)
|
||||
|
||||
for i = 1, #lines do
|
||||
centrizedText(y, colorsText, lines[i])
|
||||
y = y + 1
|
||||
end
|
||||
|
||||
return y
|
||||
if needWait then
|
||||
repeat
|
||||
needWait = pullSignal()
|
||||
until needWait == stringKeyDown or needWait == "touch"
|
||||
end
|
||||
end
|
||||
|
||||
local loadInit, menuBack, menu, input, netboot =
|
||||
function(proxy)
|
||||
status(NIL, stringsMain, "Booting from " .. proxy.address)
|
||||
status(stringsMain, "Booting from " .. proxy.address)
|
||||
|
||||
local data, chunk, handle, success, reason = "", "", proxy.open(stringsInit, "r")
|
||||
while chunk do
|
||||
@ -85,7 +95,7 @@ local loadInit, menuBack, menu, input, netboot =
|
||||
end
|
||||
proxy.close(handle)
|
||||
|
||||
success, reason = load(data)
|
||||
success, reason = load(data, "=OS")
|
||||
if success then
|
||||
success, reason = pcall(success)
|
||||
if success then
|
||||
@ -93,7 +103,7 @@ local loadInit, menuBack, menu, input, netboot =
|
||||
end
|
||||
end
|
||||
|
||||
status(NIL, stringsMain, "Failed to run init file: " .. reason, 1)
|
||||
status(stringsMain, reason, 1)
|
||||
end,
|
||||
function()
|
||||
return menuElement("Back", NIL, 1)
|
||||
@ -105,13 +115,13 @@ local loadInit, menuBack, menu, input, netboot =
|
||||
end
|
||||
|
||||
while 1 do
|
||||
local y, x, eventData = status(round(screenHeight / 2 - (#elements + 2) / 2), titleText) + 2
|
||||
local y, x, eventData = title(#elements + 2, titleText)
|
||||
|
||||
for i = 1, #elements do
|
||||
x = round(screenWidth / 2 - #elements[i].s / 2)
|
||||
x = mathFloor(screenWidth / 2 - #elements[i].s / 2)
|
||||
|
||||
if i == selectedElement then
|
||||
rectangle(round(screenWidth / 2 - maxLength / 2) - 2, y, maxLength + 4, 1, colorsSelectionBackground)
|
||||
rectangle(mathFloor(screenWidth / 2 - maxLength / 2) - 2, y, maxLength + 4, 1, colorsSelectionBackground)
|
||||
setForeground(colorsSelectionText)
|
||||
gpuSet(x, y, elements[i].s)
|
||||
else
|
||||
@ -146,7 +156,8 @@ local loadInit, menuBack, menu, input, netboot =
|
||||
while 1 do
|
||||
eblo = prefix .. text
|
||||
gpuFill(1, y, screenWidth, 1, " ")
|
||||
gpuSet(round(screenWidth / 2 - #eblo / 2), y, eblo .. (state and "█" or ""))
|
||||
gpuSetForeground(colorsText)
|
||||
gpuSet(mathFloor(screenWidth / 2 - #eblo / 2), y, eblo .. (state and "█" or ""))
|
||||
|
||||
eventData = {pullSignal(0.5)}
|
||||
if eventData[1] == stringKeyDown then
|
||||
@ -172,13 +183,13 @@ local loadInit, menuBack, menu, input, netboot =
|
||||
function(url)
|
||||
local runReason, data, handle, result, reason =
|
||||
function(text)
|
||||
status(NIL, stringsBootFromURL, "Internet boot failed: " .. text, 1)
|
||||
status(stringsBootFromURL, "Internet boot failed: " .. text, 1)
|
||||
end,
|
||||
"",
|
||||
componentProxy(internetAddress).request(url)
|
||||
|
||||
if handle then
|
||||
status(NIL, stringsBootFromURL, "Downloading script...")
|
||||
status(stringsBootFromURL, "Downloading script...")
|
||||
while 1 do
|
||||
result, reason = handle.read(mathHuge)
|
||||
if result then
|
||||
@ -211,7 +222,7 @@ local loadInit, menuBack, menu, input, netboot =
|
||||
end
|
||||
end
|
||||
|
||||
status(NIL, stringsMain, "Hold Alt to show boot options menu")
|
||||
status(stringsMain, "Hold Alt to show boot options menu")
|
||||
|
||||
local deadline, eventData = uptime() + 1
|
||||
while uptime() < deadline do
|
||||
@ -239,23 +250,21 @@ while uptime() < deadline do
|
||||
|
||||
if not isReadOnly then
|
||||
tableInsert(filesystemOptions, 1, menuElement(stringsChangeLabel, function()
|
||||
proxy.setLabel(input(status(NIL, stringsChangeLabel) + 2, "Enter new name: "))
|
||||
proxy.setLabel(input(title(2, stringsChangeLabel), "Enter new name: "))
|
||||
end, 1))
|
||||
|
||||
tableInsert(filesystemOptions, 2, menuElement("Format", function()
|
||||
status(NIL, stringsMain, "Formatting filesystem " .. address)
|
||||
status(stringsMain, "Formatting filesystem " .. address)
|
||||
for _, file in ipairs(proxy.list("/")) do
|
||||
proxy.remove(file)
|
||||
end
|
||||
status(NIL, stringsMain, "Formatting finished", 1)
|
||||
status(stringsMain, "Formatting finished", 1)
|
||||
end, 1))
|
||||
end
|
||||
|
||||
if proxy.exists(stringsInit) then
|
||||
tableInsert(filesystemOptions, 1, menuElement("Set as startup", function()
|
||||
eepromSetData(address)
|
||||
end, 1))
|
||||
end
|
||||
tableInsert(filesystemOptions, 1, menuElement("Set as startup", function()
|
||||
eepromSetData(address)
|
||||
end, 1))
|
||||
|
||||
menu(label .. " (" .. address .. ")", filesystemOptions)
|
||||
end
|
||||
@ -263,7 +272,7 @@ while uptime() < deadline do
|
||||
)
|
||||
end
|
||||
|
||||
menu("Select filesystem to show options", filesystems)
|
||||
menu("Select filesystem", filesystems)
|
||||
end),
|
||||
|
||||
menuElement("Shutdown", function()
|
||||
@ -275,7 +284,7 @@ while uptime() < deadline do
|
||||
|
||||
if internetAddress then
|
||||
tableInsert(utilities, 2, menuElement(stringsBootFromURL, function()
|
||||
netboot(input(status(NIL, stringsBootFromURL) + 2, "Enter URL: "))
|
||||
netboot(input(title(2, stringsBootFromURL), "Enter URL: "))
|
||||
end))
|
||||
end
|
||||
|
||||
@ -288,6 +297,7 @@ if data:sub(1, 1) == "#" then
|
||||
netboot(data:sub(2, -1))
|
||||
else
|
||||
proxy = componentProxy(data)
|
||||
|
||||
if proxy and proxy.exists(stringsInit) then
|
||||
loadInit(proxy)
|
||||
else
|
||||
@ -303,28 +313,9 @@ else
|
||||
end
|
||||
|
||||
if not proxy then
|
||||
status(NIL, stringsMain, "No bootable mediums found", 1)
|
||||
status(stringsMain, "No bootable mediums found", 1)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
shutdown()
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -1 +1 @@
|
||||
local a,b,c,d,e,f,g,h,i,j,k,l,m,n="MineOS EFI","Internet boot","Change label","key_down","/init.lua","filesystem",component.proxy,component.list,computer.pullSignal,computer.uptime,table.insert,math.max,math.min,math.huge;local o,p,q,r,s,t,u,v=1,0,1,1,0,g(h("eeprom")()),g(h("gpu")()),h("internet")()u.bind(h("screen")(),true)local w,x,y,z,A,B,C,D,E,F,G=computer.shutdown,u.set,u.fill,t.setData,t.getData,u.getDepth(),u.getResolution()computer.getBootAddress,computer.setBootAddress=A,z;if B==4 then o,p,q,r,s=0x333333,0xFFFFFF,0x333333,0x333333,0xFFFFFF elseif B==8 then o,p,q,r,s=0x2D2D2D,0xE1E1E1,0x878787,0x878787,0xE1E1E1 end;local H,I,J,K=function(L)if L~=E then u.setBackground(L)E=L end end,function(L)if L~=F then u.setForeground(L)F=L end end,function(M)return math.floor(M+0.5)end,function(N,O,P)if#N<O then N=N..string.rep(" ",O-#N)else N=N:sub(1,O)end;return N..(P and""or" ")end;local Q,R,S=function(T,U,V,W,L)H(L)y(T,U,V,W," ")end,function(U,X,N)local T=J(C/2-#N/2)I(X)x(T,U,N)end,function(N,Y,Z)return{s=N,c=Y,b=Z}end;local function _(U,a0,a1,a2)U=U or J(D/2-1)Q(1,1,C,D,p)R(U,o,a0)R(U+2,q,a1 or"")if a2 then repeat local a3=i()until a3==d or a3=="touch"end;return U end;local a4,a5,a6,a7,a8=function(a9)_(G,a,"Booting from "..a9.address)local aa,ab,ac,ad,ae="","",a9.open(e,"r")while ab do aa,ab=aa..ab,a9.read(ac,n)end;a9.close(ac)ad,ae=load(aa)if ad then ad,ae=pcall(ad)if ad then return end end;_(G,a,"Failed to run init file: "..ae,1)end,function()return S("Back",G,1)end,function(a0,af)local ag,ah,ai=2,1,0;for aj=1,#af do ai=math.max(ai,#af[aj].s)end;while 1 do local U,T,ak=_(J(D/2-(#af+2)/2),a0)+2;for aj=1,#af do T=J(C/2-#af[aj].s/2)if aj==ah then Q(J(C/2-ai/2)-2,U,ai+4,1,r)I(s)x(T,U,af[aj].s)else H(p)I(q)x(T,U,af[aj].s)end;U=U+1 end;ak={i()}if ak[1]==d then if ak[4]==200 and ah>1 then ah=ah-1 elseif ak[4]==208 and ah<#af then ah=ah+1 elseif ak[4]==28 then if af[ah].c then af[ah].c()end;if af[ah].b then return end end end end end,function(U,al)local N,am,an,ak,ao="",true;while 1 do an=al..N;y(1,U,C,1," ")x(J(C/2-#an/2),U,an..(am and"█"or""))ak={i(0.5)}if ak[1]==d then if ak[4]==28 then return N elseif ak[4]==14 then N=N:sub(1,-2)else ao=unicode.char(ak[3])if ao:match("^[%w%d%p%s]+")then N=N..ao end end;am=true elseif ak[1]=="clipboard"then N=N..ak[3]elseif not ak[1]then am=not am end end end,function(ap)local aq,aa,ac,ar,ae=function(N)_(G,b,"Internet boot failed: "..N,1)end,"",g(v).request(ap)if ac then _(G,b,"Downloading script...")while 1 do ar,ae=ac.read(n)if ar then aa=aa..ar else ac:close()if ae then aq(ae)else ar,ae=load(aa)if ar then z("#"..ap)ar,ae=pcall(ar)if ar then return else aq(ae)end else aq(ae)end end;break end end else aq("invalid URL-address")end end;_(G,a,"Hold Alt to show boot options menu")local as,ak=j()+1;while j()<as do ak={i(as-j())}if ak[1]==d and ak[4]==56 then local at={S("Disk management",function()local au,av={a5()},A()for aw in h(f)do local a9=g(aw)local ax,ay=a9.getLabel()or"Unnamed",a9.isReadOnly()k(au,1,S((aw==av and"> "or" ")..K(ax,10)..K(a9.spaceTotal()>1048576 and"HDD"or a9.spaceTotal()>65536 and"FDD"or"SYS",3)..K(ay and"R"or"R/W",3)..aw:sub(1,8).." "..K(string.format("%.2f",a9.spaceUsed()/a9.spaceTotal()*100).."%",6,1),function()local az={a5()}if not ay then k(az,1,S(c,function()a9.setLabel(a7(_(G,c)+2,"Enter new name: "))end,1))k(az,2,S("Format",function()_(G,a,"Formatting filesystem "..aw)for aA,aB in ipairs(a9.list("/"))do a9.remove(aB)end;_(G,a,"Formatting finished",1)end,1))end;if a9.exists(e)then k(az,1,S("Set as startup",function()z(aw)end,1))end;a6(ax.." ("..aw..")",az)end,1))end;a6("Select filesystem to show options",au)end),S("Shutdown",function()w()end),a5()}if v then k(at,2,S(b,function()a8(a7(_(G,b)+2,"Enter URL: "))end))end;a6(a,at)end end;local aa,a9=A()if aa:sub(1,1)=="#"then a8(aa:sub(2,-1))else a9=g(aa)if a9 and a9.exists(e)then a4(a9)else for aw in h(f)do a9=g(aw)if a9.exists(e)then z(aw)a4(a9)break else a9=nil end end;if not a9 then _(G,a,"No bootable mediums found",1)end end end;w()
|
||||
local a,b,c,d,e,f,g,h,i,j,k,l,m,n,o="MineOS EFI","Internet recovery","Change label","key_down","/init.lua","filesystem",component.proxy,component.list,computer.pullSignal,computer.uptime,table.insert,math.max,math.min,math.huge,math.floor;local p,q,r,s,t,u,v,w=1,0,1,1,0,g(h("eeprom")()),g(h("gpu")()),h("internet")()v.bind(h("screen")(),true)local x,z,A,B,C,D,E,F,G,H,I=computer.shutdown,v.set,v.fill,u.setData,u.getData,v.getDepth(),v.getResolution()computer.getBootAddress,computer.setBootAddress=C,B;if D==4 then p,q,r,s,t=0x333333,0xFFFFFF,0x333333,0x333333,0xFFFFFF elseif D==8 then p,q,r,s,t=0x2D2D2D,0xE1E1E1,0x878787,0x878787,0xE1E1E1 end;local J,K,L=function(M)if M~=G then v.setBackground(M)G=M end end,function(M)if M~=H then v.setForeground(M)H=M end end,function(N,O,P)if#N<O then N=N..string.rep(" ",O-#N)else N=N:sub(1,O)end;return N..(P and""or" ")end;local Q,R,S=function(T,y,U,V,M)J(M)A(T,y,U,V," ")end,function(y,W,N)local T=o(E/2-#N/2)K(W)z(T,y,N)end,function(N,X,Y)return{s=N,c=X,b=Y}end;local function Z(_,a0)y=o(F/2-_/2)Q(1,1,E,F,q)R(y,p,a0)return y+2 end;local function a1(a0,a2,a3)local a4={}for a5 in a2:gmatch("[^\r\n]+")do a4[#a4+1]=a5:gsub("\t"," ")end;local y=Z(#a4,a0)for a6=1,#a4 do R(y,r,a4[a6])y=y+1 end;if a3 then repeat a3=i()until a3==d or a3=="touch"end end;local a7,a8,a9,aa,ab=function(ac)a1(a,"Booting from "..ac.address)local ad,ae,af,ag,ah="","",ac.open(e,"r")while ae do ad,ae=ad..ae,ac.read(af,n)end;ac.close(af)ag,ah=load(ad,"=OS")if ag then ag,ah=pcall(ag)if ag then return end end;a1(a,ah,1)end,function()return S("Back",I,1)end,function(a0,ai)local aj,ak,al=2,1,0;for a6=1,#ai do al=math.max(al,#ai[a6].s)end;while 1 do local y,T,am=Z(#ai+2,a0)for a6=1,#ai do T=o(E/2-#ai[a6].s/2)if a6==ak then Q(o(E/2-al/2)-2,y,al+4,1,s)K(t)z(T,y,ai[a6].s)else J(q)K(r)z(T,y,ai[a6].s)end;y=y+1 end;am={i()}if am[1]==d then if am[4]==200 and ak>1 then ak=ak-1 elseif am[4]==208 and ak<#ai then ak=ak+1 elseif am[4]==28 then if ai[ak].c then ai[ak].c()end;if ai[ak].b then return end end end end end,function(y,an)local N,ao,ap,am,aq="",true;while 1 do ap=an..N;A(1,y,E,1," ")gpuSetForeground(r)z(o(E/2-#ap/2),y,ap..(ao and"█"or""))am={i(0.5)}if am[1]==d then if am[4]==28 then return N elseif am[4]==14 then N=N:sub(1,-2)else aq=unicode.char(am[3])if aq:match("^[%w%d%p%s]+")then N=N..aq end end;ao=true elseif am[1]=="clipboard"then N=N..am[3]elseif not am[1]then ao=not ao end end end,function(ar)local as,ad,af,at,ah=function(N)a1(b,"Internet boot failed: "..N,1)end,"",g(w).request(ar)if af then a1(b,"Downloading script...")while 1 do at,ah=af.read(n)if at then ad=ad..at else af:close()if ah then as(ah)else at,ah=load(ad)if at then B("#"..ar)at,ah=pcall(at)if at then return else as(ah)end else as(ah)end end;break end end else as("invalid URL-address")end end;a1(a,"Hold Alt to show boot options menu")local au,am=j()+1;while j()<au do am={i(au-j())}if am[1]==d and am[4]==56 then local av={S("Disk management",function()local aw,ax={a8()},C()for ay in h(f)do local ac=g(ay)local az,aA=ac.getLabel()or"Unnamed",ac.isReadOnly()k(aw,1,S((ay==ax and"> "or" ")..L(az,10)..L(ac.spaceTotal()>1048576 and"HDD"or ac.spaceTotal()>65536 and"FDD"or"SYS",3)..L(aA and"R"or"R/W",3)..ay:sub(1,8).." "..L(string.format("%.2f",ac.spaceUsed()/ac.spaceTotal()*100).."%",6,1),function()local aB={a8()}if not aA then k(aB,1,S(c,function()ac.setLabel(aa(Z(2,c),"Enter new name: "))end,1))k(aB,2,S("Format",function()a1(a,"Formatting filesystem "..ay)for aC,aD in ipairs(ac.list("/"))do ac.remove(aD)end;a1(a,"Formatting finished",1)end,1))end;k(aB,1,S("Set as startup",function()B(ay)end,1))a9(az.." ("..ay..")",aB)end,1))end;a9("Select filesystem",aw)end),S("Shutdown",function()x()end),a8()}if w then k(av,2,S(b,function()ab(aa(Z(2,b),"Enter URL: "))end))end;a9(a,av)end end;local ad,ac=C()if ad:sub(1,1)=="#"then ab(ad:sub(2,-1))else ac=g(ad)if ac and ac.exists(e)then a7(ac)else for ay in h(f)do ac=g(ay)if ac.exists(e)then B(ay)a7(ac)break else ac=nil end end;if not ac then a1(a,"No bootable mediums found",1)end end end;x()
|
||||
Loading…
Reference in New Issue
Block a user