hachem.wtf
aboutsummaryrefslogtreecommitdiff
path: root/kernel/shell.rv
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/shell.rv')
-rw-r--r--kernel/shell.rv81
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