local menu_options = { --This is our menu table. It contains basic data about the menu
  [1] = {text="Boot NexOS", color=colors.blue},
  [2] = {text="Boot Floppy", color=colors.orange},
  [3] = {text="Advanced", color=colors.cyan},
  [4] = {text="Shutdown", color=colors.gray}
}
local termX, termY = term.getSize() --The x/y size of the terminal
local function menuDraw(selected) --Our main draw function
  local yPos = termY/2 - #menu_options/2 --The initial y position
  for index, data in pairs(menu_options) do
    menu_options[index].bounds = { --Create a new table in each option with the boundary data
      x1 = termX/2 - (#data.text+4)/2;
      x2 = termX/2 + (#data.text+4)/2;
      y = yPos;
    }
    term.setTextColor(data.color)
    term.setCursorPos(data.bounds.x1, data.bounds.y)
 
    local text =
      index==selected and "[ "..data.text.." ]" or
      "  "..data.text.."  " --Essentially an if statement, but in a contracted form
    term.write(text)
    yPos = yPos+1 --Increment the initial y pos so we can move on the next line
  end
end
 
local function checkClick(x,y) --Check the mouse click to see if there's a menu option
  for index, data in pairs(menu_options) do
    if x>= data.bounds.x1 and x<= data.bounds.x2 and y==data.bounds.y then
      return index --Returns the index of the clicked option
    end
  end
  return false --If it went through the entire for loop without success, return false
end
 
term.setBackgroundColor(colors.white)
term.clear()
 
local selector = 1 --Our selector
while true do --The main loop. I would generally put this inside of a function for a program.
  menuDraw(selector) --Draw the menu first
  local e = {os.pullEvent()} --Pull an event and put the returned values into a table
  if e[1] == "key" then --If it's a key...
    if e[2] == keys.down then -- ... and it's the down arrow
      selector = selector < #menu_options and selector+1 or 1 --Increment the selector if the selector < #menu_options. Otherwise reset it to 1
    elseif e[2] == keys.up then
      selector = selector > 1 and selector-1 or #menu_options --Decrement the selector if the selector > 1. Otherwise, reset it to #menu_options
    elseif e[2] == keys.enter then
      break --Break out of the loop
    end
  elseif e[1] == "mouse_click" then
    local value = checkClick(e[3], e[4]) --Check the mouse click
    if value then --If checkClick returns a value and not false
      selector = value --Set the selector to that value and break out of the loop
      break
    end
  end
end
 
if selector == 1 then
    --[NexOS Bootloader]--
    boot0 = paintutils.loadImage("/bin/nexos/boot0")
    boot1 = paintutils.loadImage("/bin/nexos/boot1")
    boot2 = paintutils.loadImage("/bin/nexos/boot2")
    boot3 = paintutils.loadImage("/bin/nexos/boot3")
    boot4 = paintutils.loadImage("/bin/nexos/boot4")
    term.setBackgroundColor(colors.white)
    term.clear()
    paintutils.drawImage(boot0,1,1)
    sleep(0.2)
    term.clear()
    paintutils.drawImage(boot1,1,1)
    sleep(0.2)
    term.clear()
    paintutils.drawImage(boot2,1,1)
    sleep(0.2)
    term.clear()
    paintutils.drawImage(boot3,1,1)
    sleep(0.2)
    term.clear()
    paintutils.drawImage(boot4,1,1)
    sleep(0.2)
    term.clear()
    term.setBackgroundColor(colors.gray)
    term.clear()
    sleep(0.2)
    shell.run("/bin/nexos/dm")
elseif selector == 2 then
    shell.run("/disk/bin/startup")
elseif selector == 3 then
    shell.run("/bin/nexos/recovery")
elseif selector == 4 then
    os.shutdown()
end    









