const std = @import("std"); const fs = std.fs; const lib = @import("./lib.zig"); // WON'T: human output => use human command instead // TODO: error management. // TODO: verbose output (-l). pub const cwd = fs.cwd(); // Either print directory's content or file. fn print_element(path: []const u8) !void { var dir: fs.Dir = cwd.openDir(path, .{.iterate = true}) catch |err| switch (err) { error.NotDir => return lib.print("{s}\n", .{path}), else => return err, }; var dir_it = dir.iterate(); while (try dir_it.next()) |entry| { lib.print("{s}\n", .{entry.name}); } } pub fn ls() !void { var cli = try lib.CLI.init(); defer cli.deinit(); // Skipping the executable binary name. var arg_idx: usize = 1; // case there are parameters while(arg_idx < cli.args.len) { const element = cli.nextArg(&arg_idx) orelse { lib.warn("Null argument\n", .{}); return error.InvalidArgs; }; try print_element(element); } // case there were no parameter, print current directory if (cli.args.len == 1) { try print_element("."); } } pub fn main() !void { try ls(); }