From ab8b15d1aeb2b820add004765050718923c7fc37 Mon Sep 17 00:00:00 2001 From: TheWahlolly Date: Fri, 27 Jun 2025 21:13:55 +0300 Subject: [PATCH] v1.12.0 - Added drivers. --- argentum.cfg | 4 ++- argentum/store/halyde/package.cfg | 3 ++ halyde/core/boot.lua | 8 ++++-- halyde/core/drvload.lua | 46 +++++++++++++++++++++++++++++++ 4 files changed, 57 insertions(+), 4 deletions(-) create mode 100644 halyde/core/drvload.lua diff --git a/argentum.cfg b/argentum.cfg index 3ba9fc5..1142d4a 100644 --- a/argentum.cfg +++ b/argentum.cfg @@ -1,13 +1,14 @@ local agcfg = { ["halyde"] = { ["maindir"] = "", - ["version"] = "1.11.1", + ["version"] = "1.12.0", ["description"] = "A universal, customizable and feature-packed operating system for OpenComputers.", ["directories"] = { "halyde/apps", "halyde/apps/helpdb", "halyde/config/generate", "halyde/core", + "halyde/drivers", "halyde/lib", "home", "mnt" @@ -46,6 +47,7 @@ local agcfg = { "halyde/core/boot.lua", "halyde/core/cormgr.lua", "halyde/core/datatools.lua", + "halyde/core/drvload.lua", "halyde/core/evmgr.lua", "halyde/core/fullkb.lua", "halyde/core/shell.lua", diff --git a/argentum/store/halyde/package.cfg b/argentum/store/halyde/package.cfg index 7534f8d..af1e431 100644 --- a/argentum/store/halyde/package.cfg +++ b/argentum/store/halyde/package.cfg @@ -1,5 +1,7 @@ +Amnt/ Ahome/ Ahalyde/lib/ +Ahalyde/drivers/ Ahalyde/core/ Ahalyde/config/generate/ Ahalyde/apps/helpdb/ @@ -38,6 +40,7 @@ Ahalyde/config/generate/startupapps.json Ahalyde/core/boot.lua Ahalyde/core/cormgr.lua Ahalyde/core/datatools.lua +Ahalyde/core/drvload.lua Ahalyde/core/evmgr.lua Ahalyde/core/fullkb.lua Ahalyde/core/shell.lua diff --git a/halyde/core/boot.lua b/halyde/core/boot.lua index f3e5714..c06a4ae 100644 --- a/halyde/core/boot.lua +++ b/halyde/core/boot.lua @@ -1,7 +1,7 @@ local loadfile = ... local filesystem = loadfile("/halyde/lib/filesystem.lua")(loadfile) -_G._OSVERSION = "Halyde 1.11.1" +_G._OSVERSION = "Halyde 1.12.0" _G._OSLOGO = "" local handle, tmpdata = filesystem.open("/halyde/config/oslogo.ans", "r"), nil repeat @@ -47,6 +47,8 @@ local function preload(module) _G[module] = nil end +import("/halyde/core/drvload.lua") + preload("component") preload("computer") @@ -87,12 +89,12 @@ gpu.setResolution(gpu.maxResolution()) --handle:close() local fs = import("filesystem") -if not fs.exists("/halyde/config/shell.json") then +if not fs.exists("/halyde/config/shell.json") then -- Auto-generate configs fs.copy("/halyde/config/generate/shell.json", "/halyde/config/shell.json") end if not fs.exists("/halyde/config/startupapps.json") then fs.copy("/halyde/config/generate/startupapps.json", "/halyde/config/startupapps.json") end fs = nil - + import("/halyde/core/cormgr.lua") diff --git a/halyde/core/drvload.lua b/halyde/core/drvload.lua new file mode 100644 index 0000000..441b091 --- /dev/null +++ b/halyde/core/drvload.lua @@ -0,0 +1,46 @@ +local fs = import("filesystem") + +local driverPath = "/halyde/drivers" + +local drivers = fs.list(driverPath) +local driverTypes = {} + +local function loadDriver(drvName) + local driverData = import(fs.concat(driverPath, drvName)) + table.remove(drivers, table.find(drivers, drvName)) + if driverData.dependencies then + for _, dependency in pairs(driverData.dependencies) do + if table.find(drivers, dependency) then + loadDriver(dependency) + elseif table.find(drivers, dependency .. ".lua") then + loadDriver(dependency .. ".lua") + else + for typeLookupDrvName, typeLookupDrvType in pairs(driverTypes) do + if typeLookupDrvType == dependency then + loadDriver(typeLookupDrvName) + -- Don't break, because there can be multiple drivers of the correct type + end + end + end + end + end + --print(drvName) + if driverData.onStartup then -- I have no idea why would this not exist, but it's a failsafe + driverData.onStartup() + end + -- More functions to be implemented in the future +end + +for _, drvName in pairs(drivers) do -- Get all the driver types + local driverData = import(fs.concat(driverPath, drvName)) + if driverData.type then + --print(driverData.type) + driverTypes[drvName] = driverData.type -- Not the other way around because there can be multiple drivers of the same type, but there can't be multiple entries with the same key + end +end + +for _, drvName in pairs(drivers) do -- Load the drivers + if drvName:sub(-1, -1) ~= "/" then -- Check if it's not a directory. Otherwise it might be driver config + loadDriver(drvName) + end +end