-
Notifications
You must be signed in to change notification settings - Fork 0
/
Worm.lua
144 lines (130 loc) · 5.51 KB
/
Worm.lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
-- WORM Bootloader by Fisher Medders (http://medde.rs/) 08/18/22, 08/21/23
args = {...}
-- if you prefer a more suckless edit it yourself kind of thing, just edit the config table below :)
useConfig = true
config = {
["backgroundColor"]="black",
["foregroundColor"]="white",
["boot"]={
{"No Boot Options Configured!","edit /.worm/config"},
{"Edit .worm/config to add Boot Configuration!", "edit /.worm/config"}
}
}
if useConfig then
if fs.exists("/.worm/config") then
configFile = fs.open("/.worm/config","r")
config = textutils.unserialize(configFile.readAll())
configFile.close()
else
configFile = fs.open("/.worm/config","w")
configFile.write("{\n")
configFile.write(" [\"backgroundColor\"]=\"black\",\n")
configFile.write(" [\"foregroundColor\"]=\"white\",\n")
configFile.write(" [\"boot\"]={\n")
configFile.write(" {\"No Boot Options Configured!\",\"edit /.worm/config\"},\n")
configFile.write(" {\"Edit .worm/config to add Boot Configuration!\",\"edit /.worm/config\"}\n")
configFile.write(" },\n")
configFile.write(" [\"info\"]=\"boot table section 1 is the name, section 2 is the command that runs\"\n")
configFile.write("}")
configFile.close()
configFile = fs.open("/.worm/config","r")
config = textutils.unserialize(configFile.readAll())
configFile.close()
end
end
print("Detecting Basalt Library")
if not fs.exists("/lib/basalt.lua") then
print("Basalt Library Not Found!")
print("Basalt Library can be found at basalt.madefor.cc")
print("Downloading Basalt Lib")
if not fs.exists("/.worm/") then
fs.mkdir("/.worm/")
print("Making .worm directory")
end
sleep(1)
shell.run("wget run https://basalt.madefor.cc/install.lua release latest.lua /lib/basalt.lua")
end
local basalt = require("/lib/basalt")
local main = basalt.createFrame():setBackground(colors[config["backgroundColor"]])
function addToString(add, amount)
local str = ""
for i = 1,amount do
str = str .. add
end
return str
end
function addCenterLabel(ident, text, y)
local label = main:addLabel(ident):setText(text):setPosition("{parent.w/2-".. #text/2 .."}", y):setForeground(colors[config["foregroundColor"]])
return label
end
function drawBox()
pW, pH = main:getSize()
local box = {
main:addLabel("topBar"):setPosition(2,3):setText("\159"):setForeground(colors[config["backgroundColor"]]):setBackground(colors[config["foregroundColor"]]),
main:addLabel("topBarRight"):setPosition(pW-1,3):setText("\144"):setForeground(colors[config["foregroundColor"]]):setBackground(colors[config["backgroundColor"]]),
main:addLabel("topBarFill"):setPosition(3,3):setText(addToString("\143", pW-4)):setForeground(colors[config["backgroundColor"]]):setBackground(colors[config["foregroundColor"]]),
main:addLabel("bottomBar"):setPosition(2,3+pH-7):setText("\130" .. addToString("\131", pW-4) .. "\129"):setForeground(colors[config["foregroundColor"]])
}
for i = 1,pH-8 do
table.insert(main:addLabel("topBar"..i+1):setPosition(2,3+i):setText("\149"):setBackground(colors[config["foregroundColor"]]):setForeground(colors[config["backgroundColor"]]),#box-1)
table.insert(main:addLabel("topBarRight"..i):setPosition(pW-1,3+i):setText("\149"):setBackground(colors[config["backgroundColor"]]):setForeground(colors[config["foregroundColor"]]),#box-1)
end
end
local tagline = addCenterLabel("tagline", "GNU WORM version 0.02", 2)
local instructionsOne = addCenterLabel("inst1", "Use the \24 and \25 keys to select which entry", "{parent.h-3}")
local instructionsTwo = addCenterLabel("inst2", "is highlighted. Press enter to boot selected OS", "{parent.h-2}")
local instructionsTwo = addCenterLabel("inst3", "or 'c' for a command line.", "{parent.h-1}")
drawBox()
local list = main:addList("list")
list:setSize("{parent.w-5}", "{parent.h-9}")
list:setPosition(3, 4)
list:setBackground(colors[config["backgroundColor"]])
for i = 1,#config.boot do
list:addItem(" " .. config.boot[i][1], colors[config["backgroundColor"]], colors[config["foregroundColor"]], config.boot[i][2])
end
list:setSelectionColor(colors[config["foregroundColor"]], colors[config["backgroundColor"]], true)
function scrollUp()
if list:getItemIndex() ~= 1 then
list:selectItem(list:getItemIndex()-1)
end
end
function scrollDown()
if list:getItemIndex() ~= list:getItemCount() then
list:selectItem(list:getItemIndex()+1)
end
end
function listen()
while true do
event = { os.pullEvent() }
if event[1] == "key" then
if event[2] == keys.down then
scrollDown()
elseif event[2] == keys.up then
scrollUp()
elseif event[2] == keys.enter then
--basalt.debug(list:getValue().args[1])
basalt.stop()
term.clear()
term.setCursorPos(1,1)
shell.run(list:getValue().args[1])
break
elseif event[2] == keys.c then
basalt.stop()
quit = true
break
end
elseif event[1] == "mouse_scroll" then
if event[2] == 1 then
scrollDown()
else
scrollUp()
end
end
end
end
parallel.waitForAll(basalt.autoUpdate, listen)
term.setCursorPos(1,1)
term.clear()
if quit then
print("Thanks for using WORM!")
end