This commit is contained in:
Ryan T
2026-01-16 18:44:51 -05:00
parent 83814311e5
commit 83857d7e87

View File

@@ -2,78 +2,41 @@
syscall.TTY_clear() syscall.TTY_clear()
syscall.TTY_setTextColor(1) syscall.TTY_setTextColor(1)
syscall.TTY_setCursorPos(1, 1) syscall.TTY_setCursorPos(1, 1)
syscall.TTY_print("HyperionOS Bash Shell") print("HyperionOS Bash Shell")
local str="" print("")
local stopInput=false
local inputIO=syscall.IO_getBoundQueue() local preCommandText = "example@testPrompt:~$ "
local pid=syscall.HPV_getPid()
local proc=0
local fs=require("sys.fs")
printInline("> ")
while true do while true do
local event = {syscall.IO_pullEvent()} local command = ""
if event[1] then local cursorPos = 1
if not stopInput then local typingCmd = true
if event[1]=="keyTyped" then while typingCmd do
if event[3]=="\b" then local event = syscall.IO_getEventAny()
if #str>0 then if event then
str=str:sub(1,#str-1) if event[1] == "keyTyped" then
printInline("\b") if event[3] == "\n" then
end --Enter
elseif event[3]=="\n" then
print("") print("")
stopInput=true typingCmd = false
if str == "" then elseif event[3] == "\b" then
printInline("> ") --Backspace
stopInput=false if cursorPos > 1 then
else cursorPos = cursorPos - 1
local path=nil command = command:sub(1, cursorPos - 1)..command:sub(cursorPos + 1)
if fs.exists("/bin/"..str) then
path="/bin/"..str
elseif fs.exists("/bin/"..str..".lua") then
path="/bin/"..str..".lua"
end
if not path then
print("Program not found")
printInline("> ")
stopInput=false
else
local text = fs.readAllText(path)
local program, err = load(text, path)
if not program then
print(err)
printInline("> ")
end
syscall.IO_bind("bash:"..tostring(pid))
proc = syscall.HPV_spawn(program, path)
syscall.IO_bind(inputIO)
end
str=""
end end
else elseif event[3]:sub(1, 1) == "\x1b" then
str=str..event[3] --Escape Sequence
printInline(event[3]) elseif event[3] ~= "\t" and #event[3] == 1 then
end --Standard Character
end command = command:sub(1, cursorPos - 1)..event[3]..command:sub(cursorPos + 1)
end cursorPos = cursorPos + 1
end
if stopInput then
local exited, code = syscall.HPV_collect(proc)
if exited then
print("\nTask exited with code:\n"..tostring(code))
printInline("> ")
stopInput=false
else
if event[1] then
if event[1]=="keyTyped" and event[3]=="^c" then
syscall.HPV_kill(proc)
print("Terminated")
printInline("> ")
stopInput=false
else
syscall.IO_pushEvent("bash:"..tostring(pid), table.unpack(event))
end end
end end
end end
local _, cursorY = syscall.TTY_getCursorPos()
syscall.TTY_setCursorPos(1, cursorY)
printInline(preCommandText..command.." ")
syscall.TTY_setCursorPos(#preCommandText + cursorPos, cursorY)
end end
end end