v0.4.1 - Added something in the likes of an io.read() function in OpenOS. Cursor will be added next update. Shell parser will be added in 0.5.0.

This commit is contained in:
TheWahlolly
2025-04-13 17:40:19 +03:00
parent 6dfd970c62
commit b010fe7f57
6 changed files with 61 additions and 35 deletions
+1
View File
@@ -1,3 +1,4 @@
/halyde/core/datatools.lua
/halyde/core/fullkb.lua
/halyde/core/evmgr.lua
/halyde/core/shell.lua
+1 -1
View File
@@ -1,7 +1,7 @@
local loadfile = ...
local filesystem = loadfile("/halyde/lib/filesystem.lua")(loadfile)
_G._OSVERSION = "Halyde 0.4.0"
_G._OSVERSION = "Halyde 0.4.1"
function _G.import(module, ...)
local args = table.pack(...)
+1 -1
View File
@@ -2,7 +2,7 @@ _G.evmgr = {}
_G.evmgr.eventQueue = {}
local maxEventQueueLength = 10 -- increase if events start getting dropped
local ocelot = component.proxy(component.list("ocelot")())
--local ocelot = component.proxy(component.list("ocelot")())
while true do
local args
+8 -3
View File
@@ -1,11 +1,16 @@
import("termlib")
local event = import("event")
--local ocelot = component.proxy(component.list("ocelot")())
_G.shell = {}
_G.shell.workingDirectory = "/"
print("\n\n".._OSVERSION..'\n │ Welcome! Type "help" to get started.\n')
print("\n\n".._OSVERSION..'\n │ Welcome! Type "help" to get started.\n\n ')
while true do
coroutine.yield()
print(shell.workingDirectory .. " >")
termlib.nextPosX = #(shell.workingDirectory .. " > ")
termlib.nextPosY = termlib.nextPosY - 1
read()
--ocelot.log(tostring(args[1]))
termlib.nextPosX = 1
print("no shell parser yet")
end
+41 -22
View File
@@ -1,34 +1,53 @@
local event = {}
local ocelot = component.proxy(component.list("ocelot")())
function event.pull(evtype, ...)
local timeout = ...
checkArg(1, evtype, "string", "nil")
checkArg(2, timeout, "number", "nil")
--local ocelot = component.proxy(component.list("ocelot")())
function event.pull(...)
local args = {...}
local evtype, timeout
if #args == 0 then
-- No arguments, wait for any event indefinitely
evtype = nil
timeout = nil
elseif #args == 1 then
-- If one argument is provided, it could be either the event type or timeout
if type(args[1]) == "number" then
-- It's a timeout
evtype = nil
timeout = args[1]
else
-- It's an event type
evtype = args[1]
timeout = nil
end
else
-- Both event type and timeout provided
evtype = args[1]
timeout = args[2]
end
local startTime = computer.uptime()
local args = {}
local finished = false
local result = {}
repeat
-- Check event queue for matching event
for i = 1, #evmgr.eventQueue do
if evmgr.eventQueue[i][2] == evtype or not evtype then
args = table.copy(evmgr.eventQueue[i])
if not evtype or evmgr.eventQueue[i][1] == evtype then
-- Found matching event (or any event if no type specified)
result = table.copy(evmgr.eventQueue[i])
table.remove(evmgr.eventQueue, i)
break
return table.unpack(result)
end
end
if evtype then
finished = args[1] == evtype
-- Check if we've timed out
if timeout and computer.uptime() >= startTime + timeout then
return nil -- Timed out, return nil
end
if timeout then
finished = computer.uptime() >= startTime + timeout
end
if not finished then
coroutine.yield()
end
until finished
ocelot.log(tostring(args[1]))
return table.unpack(args)
-- Yield to allow other processes to run and more events to be added
coroutine.yield()
until false -- Loop until we find an event or timeout
end
return event
+9 -8
View File
@@ -1,4 +1,3 @@
local event = import("event")
--local keyboard = import("keyboard")
@@ -32,21 +31,23 @@ function _G.clear()
end
function _G.read()
ocelot.log("reading")
local curtext = ""
local nextPosX, nextPosY = termlib.nextPosX, termlib.nextPosY
while true do
local args = {event.pull("key_down", 0.5)}
ocelot.log(tostring(args[1]))
if args[4] then
local keycode = args[4]
local key = keyboard.keys[keycode]
if key == "back" then
curtext = curtext:sub(1, #curtext-1)
elseif key == "enter" then
return curtext
else
if args[3] >= 32 and args[3] <= 126 then
curtext = curtext .. (unicode.char(args[3]) or "")
else
if key == "back" then
curtext = curtext:sub(1, #curtext-1)
termlib.nextPosX, termlib.nextPosY = nextPosX, nextPosY
print(curtext.." ")
elseif key == "enter" then
return curtext
end
end
termlib.nextPosX, termlib.nextPosY = nextPosX, nextPosY
print(curtext)