First commit. Not even working prototype yet.

This commit is contained in:
Wahlolly
2025-04-02 19:39:36 +03:00
parent dd3e9e0d6d
commit 4adc959549
7 changed files with 226 additions and 0 deletions
+31
View File
@@ -0,0 +1,31 @@
local loadfile = ...
local filesystem = loadfile("/halyde/lib/filesystem.lua")(loadfile)
_G._OSVERSION = "Halyde 0.1.0"
function _G.import(module, ...)
local args = table.pack(...)
local modulepath
if module:find("^/") then
if filesystem.exists(module) then
modulepath = module
end
elseif filesystem.exists("/halyde/lib/"..module..".lua") then
modulepath = "/halyde/lib/"..module..".lua"
end
assert(modulepath, "module not found\npossible locations:\n/halyde/lib/"..module..".lua")
local handle = filesystem.open(modulepath)
local data = ""
local tmpdata = ""
repeat
tmpdata = handle:read(math.huge or math.maxinteger)
data = data .. (tmpdata or "")
until not tmpdata
assert(load(data, "="..modulepath))(table.unpack(args))
end
--local handle = assert(filesystem.open("/bazinga.txt", "w"))
--assert(handle:write("Bazinga!"))
--handle:close()
import("/halyde/core/cormgr.lua")
+30
View File
@@ -0,0 +1,30 @@
_G.cormgr = {}
_G.cormgr.corList = {}
function _G.cormgr.loadCoroutine(path)
local cor = coroutine.create(function()
import(path)
end)
table.insert(_G.cormgr.corList, cor)
coroutine.yield()
end
function handleError(errormsg)
-- nothing for now
assert(false, errormsg)
end
_G.cormgr.loadCoroutine("/halyde/core/loader.lua")
while true do
for i = 1, #_G.cormgr.corList do
local result, errormsg = coroutine.resume(_G.cormgr.corList[i])
if coroutine.status(_G.cormgr.corList[i]) == "dead" then
table.remove(_G.cormgr.corList, i)
if not result then
handleError(errormsg)
end
end
computer.pullSignal(1)
end
end
+8
View File
@@ -0,0 +1,8 @@
import("termlib")
print("wait...")
print("IT WORKS???")
print("abab")
print("abc\ndef")
print("abc\tdef")
print("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")
+17
View File
@@ -0,0 +1,17 @@
local componentlib = {}
function componentlib.get(address)
checkArg(1, address, "string")
assert(#address >= 3, "abbreviated address must be at least 3 characters long")
local components = component.list()
for currentAddress, name in pairs(components) do
if currentAddress:find("^" .. address) then
return(currentAddress)
end
end
return nil, "full address not found"
end
componentlib.invoke = component.invoke
return(componentlib)
+69
View File
@@ -0,0 +1,69 @@
local loadfile = ... -- raw loadfile from boot.lua
local component
if loadfile then
component = loadfile("/halyde/lib/component.lua")(loadfile)
else
component = require("component")
end
local filesystem = {}
function filesystem.processPath(path) -- returns the address and absolute path of a filesystem path as well as sanitizing it
checkArg(1, path, "string")
absPath = path:gsub("/+", "/"):gsub("/$", "")
local address = nil
if absPath:find("^/mnt/.../") then
address = component.get(path:sub(6,8))
if not address then
address = computer.getBootAddress()
else
absPath = absPath:sub(9)
end
else
address = computer.getBootAddress()
end
if not address then
return nil, "no such device"
end
return address, absPath
end
function filesystem.exists(path) -- check if path exists
checkArg(1, path, "string")
local address, absPath = filesystem.processPath(path)
if not address then
return false
end
return component.invoke(address, "exists", absPath)
end
function filesystem.open(path, mode) -- opens a file and returns its handle
checkArg(1, path, "string")
checkArg(2, mode, "string", "nil")
if not mode then
mode = "r"
end
if not (mode == "r" or mode == "w" or mode == "rb" or mode == "wb") then
return nil, "invalid handle type"
end
local address, absPath = filesystem.processPath(path)
local handle = component.invoke(address, "open", absPath, mode)
local properHandle = {}
properHandle.handle = handle
properHandle.address = address
function properHandle.read(self, amount)
checkArg(2, amount, "number")
return component.invoke(self.address, "read", self.handle, amount)
end
function properHandle.write(self, data)
checkArg(2, data, "string")
return component.invoke(self.address, "write", self.handle, data)
end
function properHandle.close(self)
return component.invoke(self.address, "close", self.handle)
end
return properHandle
end
return(filesystem)
+25
View File
@@ -0,0 +1,25 @@
local gpu = component.proxy(component.list("gpu")()) -- replace with component.gpu once implemented
local lineNumber = 1
function _G.print(text)
local xRes, yRes = gpu.getResolution()
if not text or not tostring(text) then
return
end
local printText = tostring(text):gsub("\t", " ")
for line in printText:gmatch("([^\n]*)\n?") do
while #line > xRes do
gpu.set(1,lineNumber,line:sub(1,xRes))
line = line:sub(xRes+1)
lineNumber = lineNumber + 1
end
gpu.set(1,lineNumber,line)
lineNumber = lineNumber + 1
end
end
function _G.clear()
local xRes, yRes = gpu.getResolution()
gpu.fill(1,1,xRes,yRes," ")
lineNumber = 1
end