New Bash
This commit is contained in:
@@ -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
|
||||||
Reference in New Issue
Block a user