diff options
Diffstat (limited to 'kernel/shell.rv')
| -rw-r--r-- | kernel/shell.rv | 81 |
1 files changed, 29 insertions, 52 deletions
diff --git a/kernel/shell.rv b/kernel/shell.rv index 4940b34..99ead73 100644 --- a/kernel/shell.rv +++ b/kernel/shell.rv @@ -32,46 +32,27 @@ end fn cmd_help(context) do help_group("shell", "shell") help_group("gils (builtin)", "gils") - - # the rest of gils, and the programs, are real files in /bin now - const items = fs:entries("/bin") - - if items != :nil do + # gils scripts are real files in /bin, native programs in /usr/bin + const scripts = fs:entries("/bin") + if scripts != :nil do puts("\n gils (/bin scripts)\n") - - for index in 0..items:len() do - const name = items[index].name - - if name:len() > 3 and name[(name:len() - 3)..] == ".rv" do - help_row(name[0..(name:len() - 3)], "") - end - end - - puts("\n programs (/bin)\n") - - for index in 0..items:len() do - const name = items[index].name - - if name:len() <= 3 or name[(name:len() - 3)..] != ".rv" do - help_row(name, "") - end + for index in 0..scripts:len() do + const name = scripts[index].name + if (name:len() > 3 and name[(name:len() - 3)..] == ".rv") do help_row(name[0..(name:len() - 3)], "") end end end - - puts("\n fonts (font <name>)\n") - - for index in 0..fonts:len() do - help_row(fonts[index].name, "8x#{fonts[index].height}") + const progs = fs:entries("/usr/bin") + if progs != :nil do + puts("\n programs (/usr/bin)\n") + for index in 0..progs:len() do help_row(progs[index].name, "") end end - const font_files = fs:entries("/fonts") - + puts("\n fonts (font <name>)\n") + for index in 0..fonts:len() do help_row(fonts[index].name, "8x#{fonts[index].height}") end + const font_files = fs:entries("/usr/share") if font_files != :nil do - puts("\n fonts on disk (font load /fonts/x.psf)\n") - - for index in 0..font_files:len() do - help_row(font_files[index].name, "") - end + puts("\n fonts on disk (font load /usr/share/x.psf)\n") + for index in 0..font_files:len() do help_row(font_files[index].name, "") end end puts("\n") @@ -152,7 +133,7 @@ fn cmd_cd(context) do or fs:is_dir(target) do wd.path = target end else do - puts("cd: #{arg}: not a directory\n") + fail("cd: #{arg}: not a directory\n") end end @@ -334,8 +315,8 @@ fn font_file(name) -> { path: string, kind: ( :ttf | :psf | :none ) } do return { path = p, kind = :none } end - | fs:size("/fonts/#{name}.psf") >= 0 => { path = "/fonts/#{name}.psf", kind = :psf } - | fs:size("/fonts/#{name}.ttf") >= 0 => { path = "/fonts/#{name}.ttf", kind = :ttf } + | fs:size("/usr/share/#{name}.psf") >= 0 => { path = "/usr/share/#{name}.psf", kind = :psf } + | fs:size("/usr/share/#{name}.ttf") >= 0 => { path = "/usr/share/#{name}.ttf", kind = :ttf } | _ => { path = name, kind = :none } end @@ -348,9 +329,7 @@ fn cmd_font(context) do end puts("\n") - - const font_files = fs:entries("/fonts") - + const font_files = fs:entries("/usr/share") if font_files != :nil do puts("on disk:") @@ -519,17 +498,13 @@ fn exec_file(target) -> { path: string, kind: ( :elf | :script | :none ) } do let candidates = {} if has_slash(target) do - candidates:push( - expand_path(target), - expand_path(target) ~ ".rv", - ) + candidates:push(expand_path(target)) + candidates:push(expand_path(target) ~ ".rv") end else do - candidates:push( - expand_path(target), - expand_path(target) ~ ".rv", - "/bin/#{target}", - "/bin/#{target}.rv", - ) + candidates:push(expand_path(target)) + candidates:push(expand_path(target) ~ ".rv") + candidates:push("/usr/bin/#{target}") + candidates:push("/bin/#{target}.rv") end for index in 0..candidates:len() do @@ -563,7 +538,7 @@ fn cmd_run(context) do const info = exec_file(target) if info.kind == :none do - puts("run: #{target}: not found\n") + fail("run: #{target}: not found\n") return :nil end @@ -580,7 +555,7 @@ fn cmd_run(context) do return :hold end - puts("run: #{target}: not executable\n") + fail("run: #{target}: not executable\n") return :nil end @@ -601,6 +576,7 @@ fn run(line) -> :nil do const argv = line:split(" ") const context = make_ctx(line, argv) + shell_status.code = 0 const command = lookup(argv[0]) if command != :nil do @@ -624,6 +600,7 @@ fn run(line) -> :nil do return :nil end + shell_status.code = 127 puts("#{argv[0]}: command not found\n") puts(prompt()) end |
