# recursive directory listing fn tree_walk(path, prefix) do const items = fs:entries(path) if (items == :nil) return :nil for index in 0..items:len() do const entry = items[index] const last = index == items:len() - 1 let branch = "|-- " # 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}" let indent = "| " 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 puts("#{target}\n") tree_walk(target, "") # /proc is the one thing not on disk so tack it on at root if target == "/" do puts("`-- proc/\n") puts(" |-- uptime\n") puts(" `-- meminfo\n") end end