new file:   calculator.lua
	new file:   lights
	renamed:    main/startup.lua -> main/menu.lua
	new file:   startup.lua
This commit is contained in:
ZareMate 2023-07-30 23:40:21 +02:00
parent a11eff21c8
commit f08ba815f0
4 changed files with 636 additions and 52 deletions

565
calculator.lua Normal file
View File

@ -0,0 +1,565 @@
--[[Smart Calculator by Cranium]]
--
local tX, tY = term.getSize()
local calc = {}
--equation states
calc.mode = false
calc.inverse = false
calc.hyp = false
calc.sqrt = false
calc.exp = false
calc.asin = false
calc.sin = false
calc.sinh = false
calc.atan = false
calc.tan = false
calc.tanh = false
calc.acos = false
calc.cos = false
calc.cosh = false
calc.log = false
calc.pos = false
-- characters
local charList = {
["0"] = {
".-.",
"| |",
"'-'"
},
["1"] = {
" . ",
"'| ",
"---"
},
["2"] = {
".-.",
".-'",
"'- "
},
["3"] = {
" -.",
" -|",
" -'"
},
["4"] = {
". .",
"'-|",
" '"
},
["5"] = {
".- ",
"'-.",
" -'"
},
["6"] = {
".-.",
"|-.",
"'-'"
},
["7"] = {
".-.",
" |",
" '"
},
["8"] = {
".-.",
"|-|",
"'-'"
},
["9"] = {
".-.",
"'-|",
" -'"
},
["."] = {
" ",
" ",
" . "
},
["-"] = {
" ",
" --",
" "
},
}
-- lay out the button labels
local labels = {
' + ', ' 1 ', ' 2 ', ' 3 ', '<--', 'sin', 'x^y', 'DEG', 'OFF',
' - ', ' 4 ', ' 5 ', ' 6 ', 'CLR', 'cos', 'srt', 'RAD', ' ',
' x ', ' 7 ', ' 8 ', ' 9 ', ' ', 'tan', 'Pi ', 'inv', ' ',
' / ', ' 0 ', '-/+', ' . ', ' = ', 'log', 'exp', 'hyp', ' '
}
-- generate the objects
local function objGen()
local _objects = {}
local width = 9
for i = 1, #labels do
table.insert(_objects, {
x = (((i - 1) % width + 1) * 5) - 1,
y = (math.ceil(i / width) * 3) + 4,
label = labels[i],
-- make operators different colors
color =
i == 1 and colors.blue or
i == 5 and colors.red or
i == 6 and colors.yellow or
i == 7 and colors.orange or
i == 8 and colors.white or
i == 9 and colors.red or
i == 10 and colors.blue or
i == 14 and colors.red or
i == 15 and colors.yellow or
i == 16 and colors.orange or
i == 17 and colors.white or
i == 18 and colors.white or
i == 19 and colors.blue or
i == 24 and colors.yellow or
i == 25 and colors.orange or
i == 26 and colors.white or
i == 27 and colors.white or
i == 28 and colors.blue or
i == 30 and colors.red or
i == 32 and colors.white or
i == 33 and colors.yellow or
i == 34 and colors.orange or
i == 35 and colors.white or
i == 36 and colors.white or
colors.lightGray,
-- controls the highlight colors for operators
back =
i == 6 and
calc.sin == true and colors.red or
calc.asin == true and colors.red or
calc.sinh == true and colors.red or
i == 8 and calc.mode == "deg" and colors.blue or
i == 15 and
calc.cos == true and colors.red or
calc.acos == true and colors.red or
calc.cosh == true and colors.red or
i == 16 and calc.sqrt == true and colors.lightBlue or
i == 17 and calc.mode == "rad" and colors.blue or
i == 24 and
calc.tan == true and colors.red or
calc.atan == true and colors.red or
calc.tanh == true and colors.red or
i == 26 and calc.inverse == true and colors.blue or
i == 30 and calc.pos == true and colors.white or
i == 33 and calc.log == true and colors.red or
i == 34 and calc.exp == true and colors.lightBlue or
i == 35 and calc.hyp == true and colors.blue or
colors.black,
})
end
return _objects
end
local function draw()
term.setBackgroundColor(colors.black)
term.clear()
local objects = objGen()
for i = 1, #objects do
local obj = objects[i]
term.setTextColor(colors.gray)
term.setBackgroundColor(colors.black)
--draw the grid
for num, line in pairs { '+---+', '| |', '+---+' } do
term.setCursorPos(obj.x, obj.y + num - 1)
write(line)
end
--draw the button text and colors
term.setCursorPos(obj.x + 1, obj.y + 1)
term.setTextColor(obj.color)
term.setBackgroundColor(obj.back)
write(obj.label)
end
end
--draw border and screen
local function display()
term.setBackgroundColor(colors.black)
term.setTextColor(colors.gray)
term.setCursorPos(2, 1)
write("+" .. string.rep("-", tX - 4) .. "+")
for i = 2, tY - 1 do
term.setCursorPos(2, i)
write("|")
term.setCursorPos(tX - 1, i)
write("|")
end
term.setCursorPos(2, tY)
write("+" .. string.rep("-", tX - 4) .. "+")
term.setBackgroundColor(colors.lightGray)
for i = 2, 6 do
term.setCursorPos(4, i)
write(string.rep(" ", tX - 6))
end
end
--run the equation passed by the user.
local function calculate(eq)
if table.concat(eq) == "()" then
eq = { "0" }
elseif table.concat(eq) == "(.)" then
eq = { "0" }
end
local sExpr = table.concat(eq)
local fnMath, sErr = loadstring("return " .. sExpr)
if not fnMath then
return "ERROR! Check syntax!"
end
--setfenv(fnMath, math)
local bSucc, vRes = pcall(fnMath)
if not bSucc then
return "ERROR! Check syntax!"
else
return vRes
end
end
-- function loop
local equation = { "(", ")" }
local result = "0"
while true do
local rLen = 0
draw()
display()
term.setBackgroundColor(colors.lightGray)
term.setTextColor(colors.white)
term.setCursorPos(4, 2)
--write the equation
write(table.concat(equation))
--write the result
if tonumber(result) ~= inf then
if string.len(result) >= 15 then
term.setCursorPos(5, 4)
term.setTextColor(colors.black)
write("= ")
for num in string.gmatch(result, ".") do
rLen = rLen + 1
local pX, pY = term.getCursorPos()
if pX >= 4 and pX <= 48 then
term.setCursorPos(rLen + 5, 4)
write(num)
else
term.setCursorPos(rLen + 5 - 48, 5)
write(num)
end
end
else
for num in string.gmatch(result, ".") do
rLen = rLen + 1
for i = 1, #charList[num] do
term.setTextColor(colors.black)
term.setCursorPos((rLen * 3) + 1, i + 3)
write(charList[num][i])
end
end
end
elseif result == nil then
term.setCursorPos(5, 4)
term.setTextColor(colors.black)
write("= ERROR")
else
term.setCursorPos(5, 4)
term.setTextColor(colors.black)
write("= INFINITY")
end
local events = { os.pullEvent() }
--mouse click filter
if events[1] == "mouse_click" and events[2] == 1 then
if events[3] >= 44 and events[3] <= 48 then
if events[4] >= 7 and events[4] <= 9 then
term.setBackgroundColor(colors.black)
term.clear()
term.setCursorPos(1, 1)
os.reboot()
end
elseif events[3] >= 39 and events[3] <= 43 then
if events[4] >= 7 and events[4] <= 9 then
if calc.mode == false then
table.remove(equation, 1)
calc.mode = "deg"
table.insert(equation, 1, "math.deg(")
elseif calc.mode == "deg" then
table.remove(equation, 1)
calc.mode = false
elseif calc.mode == "rad" then
table.remove(equation, 1)
calc.mode = "deg"
table.insert(equation, 1, "math.deg(")
end
elseif events[4] >= 10 and events[4] <= 12 then
if calc.mode == false then
table.remove(equation, 1)
calc.mode = "rad"
table.insert(equation, 1, "math.rad(")
elseif calc.mode == "rad" then
table.remove(equation, 1)
calc.mode = false
elseif calc.mode == "deg" then
table.remove(equation, 1)
calc.mode = "rad"
table.insert(equation, 1, "math.rad(")
end
elseif events[4] >= 13 and events[4] <= 15 then
if calc.inverse == true and calc.hyp == false then
calc.inverse = false
elseif calc.inverse == false and calc.hyp == true then
calc.inverse = true
calc.hyp = false
elseif calc.inverse == false and calc.hyp == false then
calc.inverse = true
end
elseif events[4] >= 16 and events[4] <= 18 then
if calc.hyp == true and calc.inverse == false then
calc.hyp = false
elseif calc.hyp == false and calc.inverse == true then
calc.hyp = true
calc.inverse = false
elseif calc.hyp == false and calc.inverse == false then
calc.hyp = true
end
end
elseif events[3] >= 34 and events[3] <= 38 then
if events[4] >= 7 and events[4] <= 9 then
table.insert(equation, #equation, "^")
elseif events[4] >= 10 and events[4] <= 12 then
if calc.sqrt == false then
table.insert(equation, #equation, "math.sqrt(")
calc.sqrt = true
elseif calc.sqrt == true then
table.insert(equation, #equation, ")")
calc.sqrt = false
end
elseif events[4] >= 13 and events[4] <= 15 then
table.insert(equation, #equation, "math.pi")
elseif events[4] >= 16 and events[4] <= 18 then
if calc.exp == false then
table.insert(equation, #equation, "math.exp(")
calc.exp = true
elseif calc.exp == true then
table.insert(equation, #equation, ")")
calc.exp = false
end
end
elseif events[3] >= 29 and events[3] <= 33 then
if events[4] >= 7 and events[4] <= 9 then
if calc.inverse == true and calc.asin == false then
table.insert(equation, #equation, "math.asin(")
calc.asin = true
elseif calc.inverse == false and calc.hyp == false and calc.sin == false then
table.insert(equation, #equation, "math.sin(")
calc.sin = true
elseif calc.hyp == true and calc.sinh == false then
table.insert(equation, #equation, "math.sinh(")
calc.sinh = true
elseif calc.asin == true then
table.insert(equation, #equation, ")")
calc.asin = false
elseif calc.sin == true then
table.insert(equation, #equation, ")")
calc.sin = false
elseif calc.sinh == true then
table.insert(equation, #equation, ")")
calc.sinh = false
end
elseif events[4] >= 10 and events[4] <= 12 then
if calc.inverse == true and calc.acos == false then
table.insert(equation, #equation, "math.acos(")
calc.acos = true
elseif calc.inverse == false and calc.hyp == false and calc.cos == false then
table.insert(equation, #equation, "math.cos(")
calc.cos = true
elseif calc.hyp == true and calc.cosh == false then
table.insert(equation, #equation, "math.cosh(")
calc.cosh = true
elseif calc.acos == true then
table.insert(equation, #equation, ")")
calc.acos = false
elseif calc.cos == true then
table.insert(equation, #equation, ")")
calc.cos = false
elseif calc.cosh == true then
table.insert(equation, #equation, ")")
calc.cosh = false
end
elseif events[4] >= 13 and events[4] <= 15 then
if calc.inverse == true and calc.atan == false then
table.insert(equation, #equation, "math.atan(")
calc.atan = true
elseif calc.inverse == false and calc.hyp == false and calc.tan == false then
table.insert(equation, #equation, "math.tan(")
calc.tan = true
elseif calc.hyp == true and calc.tanh == false then
table.insert(equation, #equation, "math.tanh(")
calc.tanh = true
elseif calc.atan == true then
table.insert(equation, #equation, ")")
calc.atan = false
elseif calc.tan == true then
table.insert(equation, #equation, ")")
calc.tan = false
elseif calc.tanh == true then
table.insert(equation, #equation, ")")
calc.tanh = false
end
elseif events[4] >= 16 and events[4] <= 18 then
if calc.log == false then
table.insert(equation, #equation, "math.log10(")
calc.log = true
elseif calc.log == true then
table.insert(equation, ")")
calc.log = false
end
end
-- backspace, clear, equals
elseif events[3] >= 24 and events[3] <= 28 then
if events[4] >= 7 and events[4] <= 9 then
if table.concat(equation) ~= "()" then
table.remove(equation, #equation - 1)
end
elseif events[4] >= 10 and events[4] <= 12 then
calc.mode = false
calc.inverse = false
calc.hyp = false
calc.sqrt = false
calc.exp = false
calc.asin = false
calc.sin = false
calc.sinh = false
calc.atan = false
calc.tan = false
calc.tanh = false
calc.acos = false
calc.cos = false
calc.cosh = false
calc.log = false
calc.pos = false
equation = { "(", ")" }
result = "0"
elseif events[4] >= 16 and events[4] <= 18 then
if equation[#equation - 1] == "+" or
equation[#equation - 1] == "-" or
equation[#equation - 1] == "*" or
equation[#equation - 1] == "/" then
table.insert(equation, #equation, "0")
elseif equation[#equation - 1] == "^" then
table.insert(equation, #equation, "1")
end
for i, v in pairs(calc) do
if calc[i] == true then
table.insert(equation, #equation, ")")
calc[i] = false
end
end
result = tostring(calculate(equation))
end
-- 3, 6, 9, decimal
elseif events[3] >= 19 and events[3] <= 23 then
if events[4] >= 7 and events[4] <= 9 then
table.insert(equation, #equation, "3")
elseif events[4] >= 10 and events[4] <= 12 then
table.insert(equation, #equation, "6")
elseif events[4] >= 13 and events[4] <= 15 then
table.insert(equation, #equation, "9")
elseif events[4] >= 16 and events[4] <= 18 then
table.insert(equation, #equation, ".")
end
-- 2, 5, 8, positive/negative
elseif events[3] >= 14 and events[3] <= 18 then
if events[4] >= 7 and events[4] <= 9 then
table.insert(equation, #equation, "2")
elseif events[4] >= 10 and events[4] <= 12 then
table.insert(equation, #equation, "5")
elseif events[4] >= 13 and events[4] <= 15 then
table.insert(equation, #equation, "8")
elseif events[4] >= 16 and events[4] <= 18 then
if calc.pos == false then
table.insert(equation, #equation, "(-")
calc.pos = true
elseif calc.pos == true then
table.insert(equation, #equation, ")")
calc.pos = false
end
end
-- 1, 4, 7, 0
elseif events[3] >= 9 and events[3] <= 13 then
if events[4] >= 7 and events[4] <= 9 then
table.insert(equation, #equation, "1")
elseif events[4] >= 10 and events[4] <= 12 then
table.insert(equation, #equation, "4")
elseif events[4] >= 13 and events[4] <= 15 then
table.insert(equation, #equation, "7")
elseif events[4] >= 16 and events[4] <= 18 then
table.insert(equation, #equation, "0")
end
-- add, subtract, multiply, divide
elseif events[3] >= 4 and events[3] <= 8 then
if events[4] >= 7 and events[4] <= 9 then
table.insert(equation, #equation, "+")
elseif events[4] >= 10 and events[4] <= 12 then
table.insert(equation, #equation, "-")
elseif events[4] >= 13 and events[4] <= 15 then
table.insert(equation, #equation, "*")
elseif events[4] >= 16 and events[4] <= 18 then
table.insert(equation, #equation, "/")
end
end
-- filter for keyboard presses
elseif events[1] == "key" then
if events[2] == 79 then
table.insert(equation, #equation, "1")
elseif events[2] == 80 then
table.insert(equation, #equation, "2")
elseif events[2] == 81 then
table.insert(equation, #equation, "3")
elseif events[2] == 75 then
table.insert(equation, #equation, "4")
elseif events[2] == 76 then
table.insert(equation, #equation, "5")
elseif events[2] == 77 then
table.insert(equation, #equation, "6")
elseif events[2] == 71 then
table.insert(equation, #equation, "7")
elseif events[2] == 72 then
table.insert(equation, #equation, "8")
elseif events[2] == 73 then
table.insert(equation, #equation, "9")
elseif events[2] == 82 then
table.insert(equation, #equation, "0")
elseif events[2] == 83 then
table.insert(equation, #equation, ".")
elseif events[2] == 78 then
table.insert(equation, #equation, "+")
elseif events[2] == 74 then
table.insert(equation, #equation, "-")
elseif events[2] == 55 then
table.insert(equation, #equation, "*")
elseif events[2] == 181 then
table.insert(equation, #equation, "/")
elseif events[2] == 14 then
if table.concat(equation) ~= "()" then
table.remove(equation, #equation - 1)
end
elseif events[2] == 28 or events[2] == 156 then
if equation[#equation - 1] == "+" or
equation[#equation - 1] == "-" or
equation[#equation - 1] == "*" or
equation[#equation - 1] == "/" then
table.insert(equation, #equation, "0")
elseif equation[#equation - 1] == "^" then
table.insert(equation, #equation, "1")
end
for i, v in pairs(calc) do
if calc[i] == true then
table.insert(equation, #equation, ")")
calc[i] = false
end
end
result = tostring(calculate(equation))
end
end
end

1
lights Normal file
View File

@ -0,0 +1 @@
0

View File

@ -1,4 +1,5 @@
--[[Local Variables]]-- --[[Local Variables]]
--
local termWidth, termHeight = term.getSize() local termWidth, termHeight = term.getSize()
local selectedItem = 1 local selectedItem = 1
local inMainMenu = true local inMainMenu = true
@ -7,50 +8,59 @@ local CableSite = "top"
local ActiveColor = rs.getBundledOutput(CableSite) local ActiveColor = rs.getBundledOutput(CableSite)
os.pullEvent = os.pullEventRaw os.pullEvent = os.pullEventRaw
--[[Menu Methods]]-- --[[Menu Methods]]
--
function Who() function Who()
term.clear() term.clear()
term.setCursorPos(1,1) term.setCursorPos(1, 1)
term.write("chuj") term.write("chuj")
sleep(3) sleep(3)
end end
function LightSystem() function LightSystem()
selectedItem = 1 selectedItem = 1
inLightsMenu=true inLightsMenu = true
while inLightsMenu do while inLightsMenu do
term.clear() term.clear()
term.setCursorPos(1,1) term.setCursorPos(1, 1)
printMenu(lightsMenu) printMenu(lightsMenu)
event,key=os.pullEvent("key") event, key = os.pullEvent("key")
onKeyPressed(key,lightsMenu) onKeyPressed(key, lightsMenu)
end end
end end
function First() function First()
lightSystem(colors.white) lightSystem(colors.white)
end end
function SecondOn() function SecondOn()
lightSystem(colors.orange) lightSystem(colors.orange)
end end
function Third() function Third()
lightSystem(colors.magenta) lightSystem(colors.magenta)
end end
function Fourth() function Fourth()
lightSystem(colors.yellow) lightSystem(colors.yellow)
end end
function Fifth() function Fifth()
lightSystem(colors.lime) lightSystem(colors.lime)
end end
function Sixth() function Sixth()
lightSystem(colors.pink) lightSystem(colors.pink)
end end
function Alarm() function Alarm()
lightSystem(colors.red) lightSystem(colors.red)
end end
function All() function All()
lightSystem(65407) lightSystem(65407)
end end
function LightsBack() function LightsBack()
inLightsMenu = false inLightsMenu = false
selectedItem = 1 selectedItem = 1
@ -66,13 +76,13 @@ end
function Edit() function Edit()
inMainMenu = false inMainMenu = false
shell.run("edit "..shell.getRunningProgram()) shell.run("edit " .. shell.getRunningProgram())
os.reboot() os.reboot()
end end
function Console() function Console()
term.clear() term.clear()
term.setCursorPos(1,1) term.setCursorPos(1, 1)
inMainMenu = false inMainMenu = false
end end
@ -86,44 +96,47 @@ function Exit()
os.shutdown() os.shutdown()
end end
--[[Menu Definitions]]-- --[[Menu Definitions]]
--
mainMenu = { mainMenu = {
[1] = { text = "Who amI?",handler=Who }, [1] = { text = "Who amI?", handler = Who },
[2] = { text = "Light Controls",handler=LightSystem }, [2] = { text = "Light Controls", handler = LightSystem },
[3] = { text = "Snake",handler=Snake }, [3] = { text = "Snake", handler = Snake },
[4] = { text = "Calculator",handler=Calculator }, [4] = { text = "Calculator", handler = Calculator },
[5] = { text = "Edit",handler=Edit }, [5] = { text = "Edit", handler = Edit },
[6] = { text = "Console",handler=Console }, [6] = { text = "Console", handler = Console },
[7] = { text = "Reboot",handler=Reboot }, [7] = { text = "Reboot", handler = Reboot },
[8] = { text = "Exit",handler=Exit } [8] = { text = "Exit", handler = Exit }
} }
lightsMenu={ lightsMenu = {
[1] = { text = "First",handler=First }, [1] = { text = "First", handler = First },
[2] = { text = "Second",handler=SecondOn }, [2] = { text = "Second", handler = SecondOn },
[3] = { text = "Third",handler=Third }, [3] = { text = "Third", handler = Third },
[4] = { text = "Fourth",handler=Fourth }, [4] = { text = "Fourth", handler = Fourth },
[5] = { text = "Fifth",handler=Fifth }, [5] = { text = "Fifth", handler = Fifth },
[6] = { text = "Sixth",handler=Sixth }, [6] = { text = "Sixth", handler = Sixth },
[7] = { text = "Alarm",handler=Alarm }, [7] = { text = "Alarm", handler = Alarm },
[8] = { text = "All (Off)",handler=All }, [8] = { text = "All (Off)", handler = All },
[9] = { text = "Back",handler=LightsBack } [9] = { text = "Back", handler = LightsBack }
} }
--[[Printing Methods]]-- --[[Printing Methods]]
--
function printMenu(menu) function printMenu(menu)
for i=1,#menu do for i = 1, #menu do
if i== selectedItem then if i == selectedItem then
print("[*]"..menu[i].text) print("[*]" .. menu[i].text)
else else
print("[ ]"..menu[i].text) print("[ ]" .. menu[i].text)
end end
end end
end end
--[[Handler Method]]-- --[[Handler Method]]
function onKeyPressed( key, menu ) --
function onKeyPressed(key, menu)
if key == keys.enter then if key == keys.enter then
onItemSelected( menu ) onItemSelected(menu)
elseif key == keys.up then elseif key == keys.up then
if selectedItem > 1 then if selectedItem > 1 then
selectedItem = selectedItem - 1 selectedItem = selectedItem - 1
@ -132,22 +145,23 @@ function onKeyPressed( key, menu )
end end
elseif key == keys.down then elseif key == keys.down then
if selectedItem < #menu then if selectedItem < #menu then
selectedItem = selectedItem + 1 selectedItem = selectedItem + 1
else else
selectedItem = 1 selectedItem = 1
end end
end end
end end
function onItemSelected( menu ) function onItemSelected(menu)
menu[selectedItem].handler(args) menu[selectedItem].handler(args)
end end
--[[Light System]]-- --[[Light System]]
function lightSystem(SetColors ) --
function lightSystem(SetColors)
if SetColors == 65407 then if SetColors == 65407 then
ActiveColor = 0 ActiveColor = 0
rs.setBundledOutput(CableSite,0) rs.setBundledOutput(CableSite, 0)
elseif colors.test(ActiveColor, SetColors) then elseif colors.test(ActiveColor, SetColors) then
ActiveColor = colors.subtract(ActiveColor, SetColors) ActiveColor = colors.subtract(ActiveColor, SetColors)
rs.setBundledOutput(CableSite, ActiveColor) rs.setBundledOutput(CableSite, ActiveColor)
@ -161,7 +175,8 @@ function lightSystem(SetColors )
file:close() file:close()
end end
--[[Restore Light System]]-- --[[Restore Light System]]
--
function RestoreLightSystem() function RestoreLightSystem()
local Restore = io.open("lights", "r") local Restore = io.open("lights", "r")
RestoredColors = tonumber(Restore:read()) RestoredColors = tonumber(Restore:read())
@ -170,25 +185,27 @@ function RestoreLightSystem()
Restore:close() Restore:close()
end end
--[[Main function]]-- --[[Main function]]
--
function main() function main()
while inMainMenu do while inMainMenu do
term.clear() term.clear()
term.setCursorPos(1,1) term.setCursorPos(1, 1)
printMenu(mainMenu) printMenu(mainMenu)
event,key = os.pullEvent("key") event, key = os.pullEvent("key")
onKeyPressed(key,mainMenu) onKeyPressed(key, mainMenu)
end end
end end
--[[Login system]]-- --[[Login system]]
--
function login() function login()
term.clear() term.clear()
term.setCursorPos(1,1) term.setCursorPos(1, 1)
print("Login:") print("Login:")
local username = read() local username = read()
term.clear() term.clear()
term.setCursorPos(1,1) term.setCursorPos(1, 1)
print("Password:") print("Password:")
local password = read("*") local password = read("*")
if username == "ZareMate" and password == "nigga" then if username == "ZareMate" and password == "nigga" then

1
startup.lua Normal file
View File

@ -0,0 +1 @@
shell.run("./main/menu.lua")