2024-08-18 00:34:13 +00:00
local __BUNDLER_FILES = { }
local __DEFAULT_IMPORT = require
local require = function ( path )
2024-08-18 00:43:01 +00:00
if __BUNDLER_FILES [ path ] then
return __BUNDLER_FILES [ path ] ( )
else
2024-08-18 01:13:38 +00:00
return __DEFAULT_IMPORT ( path )
2024-08-18 00:43:01 +00:00
end
2024-08-17 23:08:11 +00:00
end
2024-08-18 01:13:38 +00:00
rawset ( __BUNDLER_FILES , " updater.lua " , function ( )
2024-08-18 00:34:13 +00:00
local utils = require ( " utils.lua " )
local LAST_USED = os.time ( )
2024-08-18 01:34:08 +00:00
local mod = { }
2024-08-18 00:34:13 +00:00
local function checkForUpdate ( )
local current_time = os.time ( )
local difference = math.abs ( current_time - LAST_USED )
print ( " Checking for update... difference: " .. tostring ( difference ) )
--its been considerable time since the keypad was interacted with
--therefore it's time to force an update down the users throat (microsoft moment)
if difference > .5 then
2024-08-18 02:35:40 +00:00
local update_code_request = http.get ( " https://git.mcorangehq.xyz/xomf/keypadOS/raw/branch/main/keypadOS.lua?x= " .. tostring ( math.random ( 11111111 , 99999999 ) ) ) --I HATE CACHE REEEEEEEEEEEEEEEEE
2024-08-18 00:34:13 +00:00
if update_code_request then
local update_code_text = update_code_request.readAll ( )
if update_code_text then
if string.find ( update_code_text , " ^local __BUNDLER_FILES = {} " ) then
--make backup
fs.copy ( " startup.lua " , " backup.lua " )
2024-08-18 02:45:31 +00:00
local startup_file = fs.open ( " startup.lua " , " r " )
2024-08-18 02:47:50 +00:00
local startup_contents = startup_file.readAll ( )
2024-08-18 02:48:28 +00:00
startup_file.close ( )
2024-08-18 02:45:31 +00:00
if update_code_text ~= startup_contents then
local file = fs.open ( " startup.lua " , " w " )
file.write ( update_code_text )
file.close ( )
os.reboot ( )
else
print ( " Nothing changed, not updating. " )
2024-08-18 02:55:24 +00:00
return
2024-08-18 02:45:31 +00:00
end
2024-08-18 00:34:13 +00:00
end
2024-08-18 01:50:23 +00:00
print ( " Bad file download (core) " )
2024-08-18 00:34:13 +00:00
end
2024-08-18 01:50:23 +00:00
print ( " Bad mem read (core) " )
2024-08-18 00:34:13 +00:00
end
2024-08-18 01:50:23 +00:00
print ( " Bad download (core) " )
2024-08-18 00:34:13 +00:00
end
2024-08-17 23:08:11 +00:00
end
2024-08-18 01:34:08 +00:00
function mod . UpdateChecker ( )
2024-08-18 00:34:13 +00:00
while true do
checkForUpdate ( )
sleep ( 1 )
end
2024-08-17 23:08:11 +00:00
end
2024-08-18 01:34:08 +00:00
function mod . GetBasalt ( )
2024-08-18 00:34:13 +00:00
if fs.exists ( " basalt.lua " ) then
utils.MonPrint ( " Basalt found! " )
else
utils.MonPrint ( " Downloading basalt... " )
local basalt_code = http.get ( " https://raw.githubusercontent.com/Pyroxenium/Basalt/master/docs/versions/latest.lua " ) . readAll ( )
utils.MonPrint ( " Installing basalt... " )
local file = fs.open ( " basalt.lua " , " w " )
if not file then
utils.MonPrint ( " failed to get basalt " )
sleep ( 60 )
os.reboot ( )
end
2024-08-18 00:36:52 +00:00
file.write ( utils.Cast ( basalt_code ) )
2024-08-18 00:34:13 +00:00
file.close ( )
utils.MonPrint ( " Rebooting... " )
os.reboot ( )
end
2024-08-17 23:08:11 +00:00
end
2024-08-18 01:34:08 +00:00
return mod
2024-08-17 23:08:11 +00:00
2024-08-18 01:13:38 +00:00
end ) -- FILE END: updater.lua --
2024-08-17 23:08:11 +00:00
2024-08-18 01:13:38 +00:00
rawset ( __BUNDLER_FILES , " config.lua " , function ( )
2024-08-18 00:34:13 +00:00
return {
correctPin = " 42169 "
}
2024-08-17 23:08:11 +00:00
2024-08-18 01:13:38 +00:00
end ) -- FILE END: config.lua --
2024-08-18 00:34:13 +00:00
2024-08-18 01:13:38 +00:00
rawset ( __BUNDLER_FILES , " ui.lua " , function ( )
2024-08-18 00:36:52 +00:00
local utils = require ( " utils.lua " )
2024-08-18 00:34:13 +00:00
local basalt = require ( " basalt " )
local config = require ( " config.lua " )
local updater = require ( " updater.lua " )
--- @type Monitor
2024-08-18 00:36:52 +00:00
local monitor = utils.Cast ( peripheral.find ( " monitor " ) )
2024-08-18 00:34:13 +00:00
--- @type drive
2024-08-18 00:36:52 +00:00
local drive = utils.Cast ( peripheral.find ( " drive " ) )
2024-08-18 01:34:08 +00:00
local mod = { }
2024-08-18 00:34:13 +00:00
--- @class Ui
--- @field pin string
--- @field main any
--- @field pinLabel any
--- @field enterButton any
--- @field resetEverything function
--- @field unlockDoor function
--- @field addToPin function
--- @param ui Ui
2024-08-18 02:15:40 +00:00
local function resetEverything ( ui )
sleep ( 2 )
ui.pin = " "
ui.pinLabel : setText ( " " )
redstone.setOutput ( " front " , false )
ui.enterButton : setBackground ( colors.blue )
end
--- @param ui Ui
2024-08-18 00:34:13 +00:00
local function unlockDoor ( ui )
2024-08-17 23:08:11 +00:00
if drive.isDiskPresent ( ) then
2024-08-18 00:34:13 +00:00
if drive.getDiskLabel ( ) == config.correctPin then
ui.pin = config.correctPin
2024-08-17 23:08:11 +00:00
drive : ejectDisk ( )
end
end
2024-08-18 00:34:13 +00:00
basalt.debug ( " test " )
if ui.pin == config.correctPin then
ui.enterButton : setBackground ( colors.green )
ui.pinLabel : setText ( " Welcome " )
redstone.setOutput ( " front " , true )
if drive.isDiskPresent ( ) then
if drive.getDiskLabel ( ) == nil then
drive.setDiskLabel ( config.correctPin )
ui.pinLabel : setText ( " Crd set " )
drive : ejectDisk ( )
end
end
else
ui.pinLabel : setText ( " Wrong " )
ui.enterButton : setBackground ( colors.red )
end
2024-08-18 02:09:44 +00:00
ui.main : addThread ( ) : start ( function ( )
2024-08-18 02:15:40 +00:00
resetEverything ( ui )
2024-08-18 02:09:44 +00:00
end )
2024-08-17 23:08:11 +00:00
end
2024-08-18 00:34:13 +00:00
--- @param ui Ui
local function addToPin ( ui , i )
if # ui.pin >= 5 then
return
end
ui.pin = ui.pin .. tostring ( i )
ui.pinLabel : setText ( ui.pin )
end
2024-08-18 01:34:08 +00:00
function mod . InitUi ( )
2024-08-18 00:34:13 +00:00
local ui = {
2024-08-18 01:56:03 +00:00
pin = " " ,
2024-08-18 01:40:57 +00:00
main = basalt.addMonitor ( ) ,
2024-08-18 00:34:13 +00:00
}
ui.main : setMonitor ( monitor )
ui.pinLabel = ui.main : addLabel ( )
: setText ( " " )
: setFontSize ( 1 )
ui.enterButton = ui.main : addButton ( )
: setText ( " >>>> " )
: setBackground ( colors.blue )
: setPosition ( 6 , 3 )
: setSize ( 1.5 , 3.2 )
: onClick ( function ( )
unlockDoor ( ui )
end )
local btnX = 1
local btnY = 3
for i = 1 , 9 do
ui.main : addButton ( )
: setPosition ( btnX , btnY )
: setText ( tostring ( i ) )
: setSize ( 2 , 1 )
: onClick ( function ( )
addToPin ( ui , i )
end )
btnX = btnX + 2
if btnX >= 6 then
btnY = btnY + 1
btnX = 1
end
end
2024-08-18 01:50:23 +00:00
local status , err = pcall ( function ( )
2024-08-18 01:52:11 +00:00
parallel.waitForAll ( basalt.autoUpdate , updater.UpdateChecker )
2024-08-18 00:34:13 +00:00
end )
2024-08-18 02:02:09 +00:00
if not status and err ~= " Terminated " then
2024-08-18 01:50:23 +00:00
print ( " Error detected: " .. err )
2024-08-18 02:45:31 +00:00
utils.MonReset ( 0.5 )
2024-08-18 00:34:13 +00:00
fs.delete ( " basalt.lua " )
fs.delete ( " startup.lua " )
fs.copy ( " backup.lua " , " startup.lua " )
2024-08-18 02:28:14 +00:00
os.reboot ( )
2024-08-18 00:34:13 +00:00
end
end
2024-08-18 01:34:08 +00:00
return mod
2024-08-17 23:08:11 +00:00
2024-08-18 01:13:38 +00:00
end ) -- FILE END: ui.lua --
2024-08-17 23:08:11 +00:00
2024-08-18 01:13:38 +00:00
rawset ( __BUNDLER_FILES , " utils.lua " , function ( )
2024-08-18 01:34:08 +00:00
local utils = { }
2024-08-18 00:39:01 +00:00
-- Type coersion for lsp
---@generic T
---@param object any
---@return T
2024-08-18 01:34:08 +00:00
function utils . Cast ( object )
2024-08-18 00:39:01 +00:00
return object
end
2024-08-18 00:34:13 +00:00
--- @type Monitor
2024-08-18 01:35:45 +00:00
local MONITOR = utils.Cast ( peripheral.find ( " monitor " ) )
2024-08-18 00:34:13 +00:00
local MONITOR_Y = 1
2024-08-18 01:34:08 +00:00
function utils . MonPrint ( text )
2024-08-18 00:34:13 +00:00
MONITOR.setCursorPos ( 1 , MONITOR_Y )
MONITOR.write ( text )
MONITOR_Y = MONITOR_Y + 1
end
2024-08-18 01:34:08 +00:00
function utils . MonReset ( scale )
2024-08-18 00:34:13 +00:00
MONITOR.clear ( )
MONITOR.setTextScale ( scale )
end
2024-08-18 01:34:08 +00:00
return utils ;
2024-08-17 23:08:11 +00:00
2024-08-18 01:13:38 +00:00
end ) -- FILE END: utils.lua --
2024-08-18 00:34:13 +00:00
2024-08-18 01:13:38 +00:00
rawset ( __BUNDLER_FILES , " main.lua " , function ( )
2024-08-18 00:34:13 +00:00
-- keycardOS "bootloader", has no access to basalt
-- intended for checking for updates, and automatically updating basalt if it is missing
local utils = require ( " utils.lua " )
local updater = require ( " updater.lua " )
2024-08-18 01:34:08 +00:00
local main = { }
2024-08-18 00:34:13 +00:00
KEYPADOS_VERSION = " 3.0 "
2024-08-18 01:34:08 +00:00
function main . Main ( )
2024-08-18 02:41:05 +00:00
utils.MonReset ( 0.5 )
2024-08-18 01:36:42 +00:00
updater.GetBasalt ( )
2024-08-18 00:34:13 +00:00
utils.MonPrint ( " keypadOS v " .. KEYPADOS_VERSION )
2024-08-18 02:41:05 +00:00
utils.MonReset ( 1 )
2024-08-18 01:45:34 +00:00
require ( " ui.lua " ) . InitUi ( )
2024-08-17 23:08:11 +00:00
end
2024-08-18 01:34:08 +00:00
return main
2024-08-18 00:34:13 +00:00
2024-08-18 01:13:38 +00:00
end ) -- FILE END: main.lua --
2024-08-17 23:08:11 +00:00
2024-08-18 00:34:13 +00:00
require ( " main.lua " ) . Main ( )