diff options
| author | hachem <im@hachem.wtf> | 2026-10-09 11:08:09 +0200 |
|---|---|---|
| committer | hachem <im@hachem.wtf> | 2026-10-09 11:08:09 +0200 |
| commit | e0572c37d970d601c17085bdb082cc6ef4356891 (patch) | |
| tree | f0b4d71c92978e74d127d7090d3e11380378a8b3 /gils | |
| parent | 8cb66100fe802c38d180ea29a11a902decf0fd8b (diff) | |
chore: fmt some revo code based on lung's example
Diffstat (limited to 'gils')
| -rw-r--r-- | gils/cp.rv | 17 | ||||
| -rw-r--r-- | gils/gils.rv | 35 | ||||
| -rw-r--r-- | gils/head.rv | 33 | ||||
| -rw-r--r-- | gils/ls.rv | 15 | ||||
| -rw-r--r-- | gils/mkdir.rv | 8 | ||||
| -rw-r--r-- | gils/mv.rv | 18 | ||||
| -rw-r--r-- | gils/rm.rv | 8 | ||||
| -rw-r--r-- | gils/tail.rv | 32 | ||||
| -rw-r--r-- | gils/touch.rv | 12 | ||||
| -rw-r--r-- | gils/tree.rv | 30 | ||||
| -rw-r--r-- | gils/wc.rv | 26 |
11 files changed, 160 insertions, 74 deletions
@@ -2,14 +2,19 @@ # HAAAAAANNNNKKKK const context = env.ctx -if context.argv:len() < 3 do fail("usage: cp <source> <destination>\n") end -else do + +if context.argv:len() < 3 do + fail("usage: cp <source> <destination>\n") +end else do const source = expand_path(context.argv[1]) const destination = expand_path(context.argv[2]) const size = fs:size(source) - if size < 0 do fail("cp: #{source}: no such file\n") end - else do - const contents = if size > 0 fs:read_bytes(source, 0, size) else "" - if fs:store(destination, contents) == 1 do puts("#{source} -> #{destination}\n") end + + if size < 0 do + fail("cp: #{source}: no such file\n") + end else do + const contents = if (size > 0) fs:read_bytes(source, 0, size) else "" + if (fs:store(destination, contents) == 1) + puts("#{source} -> #{destination}\n") end end diff --git a/gils/gils.rv b/gils/gils.rv index a500322..2432890 100644 --- a/gils/gils.rv +++ b/gils/gils.rv @@ -6,41 +6,54 @@ fn register(usage, group, help, handler) do commands:push({ name = name, usage = usage, group = group, help = help, handler = handler }) end -fn lookup(name) do +fn lookup(name) -> table | :nil do for index in 0..commands:len() do - if commands[index].name == name return commands[index] + if (commands[index].name == name) + return commands[index] end return :nil end -fn make_ctx(line, argv) do +fn make_ctx(line, argv) -> { line: string, argv: table, rest: string } do const name = argv[0] let rest = "" + const cut = name:len() + 1 - if line:len() > cut do rest = line[cut..] end + if (line:len() > cut) + rest = line[cut..] + return { line = line, argv = argv, rest = rest } end # scripts read their args off env.ctx, stashed here before eval global env = { ctx = :nil } -# first use of unless in history -global expand_path = fn(path) do - if path:len() == 0 return wd.path +# first use of unless in revo history +global expand_path = fn(path) -> string do + if (path:len() == 0) + return wd.path + unless (path[0] == "/") do const slash = unless (wd.path == "/") "/" else "" path = "#{wd.path}#{slash}#{path}" end + return path end -fn run_script_path(path, label, ctx) do +fn run_script_path(path, label, ctx) -> bool do const size = fs:size(path) - if size < 0 return :false + if (size < 0) + return :false + env.ctx = ctx const error_msg = eval_script(fs:read_bytes(path, 0, size)) - if error_msg != :nil do fail("#{label}: #{error_msg}\n") end + if (error_msg != :nil) + fail("#{label}: #{error_msg}\n") + return :true end -fn run_script(name, ctx) run_script_path("/bin/#{name}.rv", name, ctx) +fn run_script(name, ctx) -> bool do + return run_script_path("/bin/#{name}.rv", name, ctx) +end diff --git a/gils/head.rv b/gils/head.rv index 2c2a82f..eb50087 100644 --- a/gils/head.rv +++ b/gils/head.rv @@ -1,27 +1,40 @@ # gimme some head lung -fn file_lines(path) do +fn file_lines(path) -> table | :nil do const size = fs:size(path) - if size < 0 return :nil - const contents = if size > 0 fs:read_bytes(path, 0, size) else "" + if (size < 0) + return :nil + + const contents = if (size > 0) fs:read_bytes(path, 0, size) else "" const raw_lines = contents:split("\n") let result = {} for index in 0..raw_lines:len() do - if (index < raw_lines:len() - 1 or raw_lines[index]:len() > 0) result:push(raw_lines[index]) + if (index < raw_lines:len() - 1 or raw_lines[index]:len() > 0) + result:push(raw_lines[index]) end return result end const context = env.ctx -if context.argv:len() < 2 do fail("usage: head [n] <path>\n") end -else do + +if context.argv:len() < 2 do + fail("usage: head [n] <path>\n") +end else do let limit = 10 let path_arg = context.argv[1] - if (context.argv:len() >= 3 and parse_pid(context.argv[1]) >= 0) do limit = parse_pid(context.argv[1]) path_arg = context.argv[2] end + if context.argv:len() >= 3 and parse_pid(context.argv[1]) >= 0 do + limit = parse_pid(context.argv[1]) + path_arg = context.argv[2] + end + const lines = file_lines(expand_path(path_arg)) - if lines == :nil do fail("head: no such file\n") end - else do + if lines == :nil do + fail("head: no such file\n") + end else do let index = 0 - while (index < lines:len() and index < limit) do puts("#{lines[index]}\n") index += 1 end + while (index < lines:len() and index < limit) do + puts("#{lines[index]}\n") + index += 1 + end end end @@ -1,10 +1,15 @@ # list a directory const context = env.ctx -const target = if context.argv:len() > 1 expand_path(context.argv[1]) else wd.path -if vfs_owns(target) do vfs_ls(target) end -else do +const target = if (context.argv:len() > 1) expand_path(context.argv[1]) else wd.path + +if vfs_owns(target) do + vfs_ls(target) +end else do const count = fs:ls(target) - if target == "/" do puts(" proc/\n") end - else if count == 0 do puts(" (empty)\n") end + if target == "/" do + puts(" proc/\n") + end else if count == 0 do + puts(" (empty)\n") + end end diff --git a/gils/mkdir.rv b/gils/mkdir.rv index c7d12f7..9da7689 100644 --- a/gils/mkdir.rv +++ b/gils/mkdir.rv @@ -1,5 +1,9 @@ # make a directory const context = env.ctx -if context.argv:len() < 2 do fail("usage: mkdir <path>\n") end -else do fs:mkdir(expand_path(context.argv[1])) end + +if context.argv:len() < 2 do + fail("usage: mkdir <path>\n") +end else do + fs:mkdir(expand_path(context.argv[1])) +end @@ -1,14 +1,20 @@ # move or rename a file const context = env.ctx -if context.argv:len() < 3 do fail("usage: mv <source> <destination>\n") end -else do +if context.argv:len() < 3 do + fail("usage: mv <source> <destination>\n") +end else do const source = expand_path(context.argv[1]) const destination = expand_path(context.argv[2]) const size = fs:size(source) - if size < 0 do fail("mv: #{source}: no such file\n") end - else do - const contents = if size > 0 fs:read_bytes(source, 0, size) else "" - if fs:store(destination, contents) == 1 do fs:unlink(source) puts("#{source} -> #{destination}\n") end + + if size < 0 do + fail("mv: #{source}: no such file\n") + end else do + const contents = if (size > 0) fs:read_bytes(source, 0, size) else "" + if fs:store(destination, contents) == 1 do + fs:unlink(source) + puts("#{source} -> #{destination}\n") + end end end @@ -2,5 +2,9 @@ const context = env.ctx const parsed = arg_name(context.rest, 0) -if parsed.name:len() == 0 do fail("usage: rm <path>\n") end -else do fs:rm(expand_path(parsed.name)) end + +if parsed.name:len() == 0 do + fail("usage: rm <path>\n") +end else do + fs:rm(expand_path(parsed.name)) +end diff --git a/gils/tail.rv b/gils/tail.rv index c1ca124..c0ce1df 100644 --- a/gils/tail.rv +++ b/gils/tail.rv @@ -1,29 +1,41 @@ # my tail is 16 inches long # and its between my legs -fn file_lines(path) do +fn file_lines(path) -> table | :nil do const size = fs:size(path) - if size < 0 return :nil - const contents = if size > 0 fs:read_bytes(path, 0, size) else "" + if (size < 0) + return :nil + + const contents = if (size > 0) fs:read_bytes(path, 0, size) else "" const raw_lines = contents:split("\n") let result = {} + for index in 0..raw_lines:len() do - if (index < raw_lines:len() - 1 or raw_lines[index]:len() > 0) result:push(raw_lines[index]) + if (index < raw_lines:len() - 1 or raw_lines[index]:len() > 0) + result:push(raw_lines[index]) end return result end const context = env.ctx -if context.argv:len() < 2 do fail("usage: tail [n] <path>\n") end -else do +if context.argv:len() < 2 do + fail("usage: tail [n] <path>\n") +end else do let limit = 10 let path_arg = context.argv[1] - if (context.argv:len() >= 3 and parse_pid(context.argv[1]) >= 0) do limit = parse_pid(context.argv[1]) path_arg = context.argv[2] end + if context.argv:len() >= 3 and parse_pid(context.argv[1]) >= 0 do + limit = parse_pid(context.argv[1]) + path_arg = context.argv[2] + end + const lines = file_lines(expand_path(path_arg)) - if lines == :nil do fail("tail: no such file\n") end - else do + if lines == :nil do + fail("tail: no such file\n") + end else do let start = lines:len() - limit - if start < 0 do start = 0 end + if (start < 0) + start = 0 + for index in start..lines:len() do puts("#{lines[index]}\n") end end end diff --git a/gils/touch.rv b/gils/touch.rv index f8e3e18..3032e96 100644 --- a/gils/touch.rv +++ b/gils/touch.rv @@ -1,9 +1,13 @@ # dont touch my nono square const context = env.ctx -if context.argv:len() < 2 do fail("usage: touch <path>\n") end -else do +if context.argv:len() < 2 do + fail("usage: touch <path>\n") +end else do const path = expand_path(context.argv[1]) - if fs:is_dir(path) do fail("touch: #{path}: is a directory\n") end - else if fs:size(path) < 0 do fs:store(path, "") end + if fs:is_dir(path) do + fail("touch: #{path}: is a directory\n") + end else if fs:size(path) < 0 do + fs:store(path, "") + end end diff --git a/gils/tree.rv b/gils/tree.rv index d1a6af6..d146403 100644 --- a/gils/tree.rv +++ b/gils/tree.rv @@ -1,29 +1,39 @@ -# recursive directory listing. +# recursive directory listing fn tree_walk(path, prefix) do const items = fs:entries(path) - if items == :nil return :nil + if (items == :nil) + return :nil + for index in 0..items:len() do const entry = items[index] const last = index == items:len() - 1 let branch = "|-- " - if last do branch = "`-- " end # font doesnt support fancy ascii symbols - const slash = if entry.type == 2 "/" else "" + # font doesnt support fancy ascii symbols + if (last) + branch = "`-- " + + const slash = if (entry.type == 2) "/" else "" puts("#{prefix}#{branch}#{entry.name}#{slash}\n") + if entry.type == 2 do - const child = if path == "/" "/#{entry.name}" else "#{path}/#{entry.name}" + const child = if (path == "/") "/#{entry.name}" else "#{path}/#{entry.name}" let indent = "| " - if last do indent = " " end + if (last) + indent = " " tree_walk(child, prefix ~ indent) end end end const context = env.ctx -const target = if context.argv:len() > 1 expand_path(context.argv[1]) else wd.path -if (vfs_owns(target) and target != "/") do fail("tree: #{target}: virtual dir\n") end -else if (target != "/" and fs:is_dir(target) == :false) do fail("tree: #{target}: not a directory\n") end -else do +const target = if (context.argv:len() > 1) expand_path(context.argv[1]) else wd.path + +if vfs_owns(target) and target != "/" do + fail("tree: #{target}: virtual dir\n") +end else if target != "/" and fs:is_dir(target) == :false do + fail("tree: #{target}: not a directory\n") +end else do puts("#{target}\n") tree_walk(target, "") # /proc is the one thing not on disk so tack it on at root @@ -1,22 +1,32 @@ # word count const context = env.ctx -if context.argv:len() < 2 do fail("usage: wc <path>\n") end -else do +if context.argv:len() < 2 do + fail("usage: wc <path>\n") +end else do const path = expand_path(context.argv[1]) const size = fs:size(path) - if size < 0 do fail("wc: #{path}: no such file\n") end - else do - const contents = if size > 0 fs:read_bytes(path, 0, size) else "" + + if size < 0 do + fail("wc: #{path}: no such file\n") + end else do + const contents = if (size > 0) fs:read_bytes(path, 0, size) else "" let line_count = 0 let word_count = 0 let in_word = :false + for index in 0..contents:len() do const character = contents[index] - if character == "\n" do line_count += 1 end - if (character == " " or character == "\n" or character == "\t") do in_word = :false end - else if in_word == :false do word_count += 1 in_word = :true end + if (character == "\n") + line_count += 1 + if character == " " or character == "\n" or character == "\t" do + in_word = :false + end else if in_word == :false do + word_count += 1 + in_word = :true + end end + puts(" #{line_count} #{word_count} #{size} #{context.argv[1]}\n") end end |
