--:Minify:-- syscall.TTY_clear() syscall.TTY_setTextColor(1) syscall.TTY_setCursorPos(1, 1) syscall.TTY_print("HyperionOS Bash Shell") local str="" local stopInput=false local inputIO=syscall.IO_getBoundQueue() local pid=syscall.getpid() local proc=0 local fs=require("sys.fs") local timeout=false printInline("> ") while true do local event = {syscall.IO_pullEvent()} if event[1] then if not stopInput then if event[1]=="keyTyped" then if event[3]=="\b" then if #str>0 then str=str:sub(1,#str-1) printInline("\b") end elseif event[3]=="\n" then print("") stopInput=true if str == "" then printInline("> ") stopInput=false else local path=nil 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.spawn(program, path) syscall.IO_bind(inputIO) end str="" end else str=str..event[3] printInline(event[3]) end end end timeout=false else timeout=true end if stopInput then local exited, code = syscall.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.kill(proc) print("Terminated") printInline("> ") stopInput=false elseif event[1]=="keyTyped" and event[3]=="^d" then syscall.kill(proc) syscall.exit(0) else syscall.IO_pushEvent("bash:"..tostring(pid), table.unpack(event)) end end end end if timeout then sleep(.05) end end