Changes:
new file: calculator.lua new file: lights renamed: main/startup.lua -> main/menu.lua new file: startup.lua
This commit is contained in:
parent
a11eff21c8
commit
f08ba815f0
565
calculator.lua
Normal file
565
calculator.lua
Normal 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,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
1
startup.lua
Normal file
@ -0,0 +1 @@
|
|||||||
|
shell.run("./main/menu.lua")
|
||||||
Loading…
x
Reference in New Issue
Block a user