diff options
author | Matthias Andreas Benkard <code@mail.matthias.benkard.de> | 2025-08-14 20:34:10 +0200 |
---|---|---|
committer | Matthias Andreas Benkard <code@mail.matthias.benkard.de> | 2025-08-14 20:34:20 +0200 |
commit | e06ac6532d13913c9f2910bbc4d4e6c56e48d37b (patch) | |
tree | 778eb57bcd9860209c5c4a06b197a1beae6f5b77 /src | |
parent | af64a8fb6f8d0651d1881166d79fccbc2c2872f3 (diff) |
DIR: Fix tabular output format.
Diffstat (limited to 'src')
-rw-r--r-- | src/cmd/dir.zig | 7 | ||||
-rw-r--r-- | src/eval.zig | 1 | ||||
-rw-r--r-- | src/main.zig | 12 | ||||
-rw-r--r-- | src/paths.zig | 39 |
4 files changed, 35 insertions, 24 deletions
diff --git a/src/cmd/dir.zig b/src/cmd/dir.zig index 5aff48b..64197b9 100644 --- a/src/cmd/dir.zig +++ b/src/cmd/dir.zig @@ -119,15 +119,16 @@ pub const Dir = struct { // Convert filename to 8.3 format const short_name = try convertTo83(ctx.allocator, entry.name); - defer ctx.allocator.free(short_name); + defer ctx.allocator.free(short_name.name); + defer ctx.allocator.free(short_name.ext); switch (entry.kind) { .directory => { - try output_buffer.writer().print("{s} <DIR> {s}\n", .{ date_time, short_name }); + try output_buffer.writer().print("{s:<8} {s:<3} <DIR> {s}\n", .{ short_name.name, short_name.ext, date_time }); dir_count += 1; }, .file => { - try output_buffer.writer().print("{s} {d:>14} {s}\n", .{ date_time, stat.size, short_name }); + try output_buffer.writer().print("{s:<8} {s:<3} {d:>14} {s}\n", .{ short_name.name, short_name.ext, stat.size, date_time }); file_count += 1; total_file_bytes += stat.size; }, diff --git a/src/eval.zig b/src/eval.zig index 3b349e0..287b23a 100644 --- a/src/eval.zig +++ b/src/eval.zig @@ -24,7 +24,6 @@ const Redirect = syntax.Redirect; const paths = @import("paths.zig"); const formatDosPath = paths.formatDosPath; -const convertTo83 = paths.convertTo83; const cmdTypes = @import("cmd/lib/types.zig"); pub const CommandStatus = cmdTypes.CommandStatus; diff --git a/src/main.zig b/src/main.zig index 7b4b43e..1190e76 100644 --- a/src/main.zig +++ b/src/main.zig @@ -68,8 +68,13 @@ fn formatPath(allocator: Allocator, path: []const u8) ![]const u8 { first_component = false; const short_name = try convertTo83(allocator, component); - defer allocator.free(short_name); - try result.appendSlice(short_name); + defer allocator.free(short_name.name); + defer allocator.free(short_name.ext); + try result.appendSlice(short_name.name); + if (short_name.ext.len > 0) { + try result.append('.'); + try result.appendSlice(short_name.ext); + } } // Prepend drive if present or add default C: @@ -128,6 +133,9 @@ pub fn main() !void { defer _ = gpa.deinit(); const allocator = gpa.allocator(); + print("Starting MB-DOSE...\n\n", .{}); + print("HIMEM is testing extended memory...done.\n\n", .{}); + const prompt_spec = "$p$g "; while (true) { diff --git a/src/paths.zig b/src/paths.zig index b64ff04..dd3ace2 100644 --- a/src/paths.zig +++ b/src/paths.zig @@ -32,8 +32,13 @@ pub fn formatDosPath(allocator: Allocator, path: []const u8) ![]const u8 { // Convert component to 8.3 format const short_name = try convertTo83(allocator, component); - defer allocator.free(short_name); - try result.appendSlice(short_name); + defer allocator.free(short_name.name); + defer allocator.free(short_name.ext); + try result.appendSlice(short_name.name); + if (short_name.ext.len > 0) { + try result.append('.'); + try result.appendSlice(short_name.ext); + } } // Ensure it starts with a drive letter if it's an absolute path @@ -51,15 +56,15 @@ pub fn formatDosPath(allocator: Allocator, path: []const u8) ![]const u8 { return allocator.dupe(u8, result.items); } -pub fn convertTo83(allocator: Allocator, filename: []const u8) ![]const u8 { +pub fn convertTo83(allocator: Allocator, filename: []const u8) !struct { name: []const u8, ext: []const u8 } { // Handle special directories if (std.mem.eql(u8, filename, ".") or std.mem.eql(u8, filename, "..")) { - return allocator.dupe(u8, filename); + return .{ .name = try allocator.dupe(u8, filename), .ext = try allocator.dupe(u8, "") }; } // Handle drive letters (like C:) if (filename.len == 2 and filename[1] == ':') { - return allocator.dupe(u8, filename); + return .{ .name = try allocator.dupe(u8, filename), .ext = try allocator.dupe(u8, "") }; } // Split filename and extension @@ -97,29 +102,27 @@ pub fn convertTo83(allocator: Allocator, filename: []const u8) ![]const u8 { } } - // Build 8.3 filename - var result = ArrayList(u8).init(allocator); - defer result.deinit(); + var name_result = ArrayList(u8).init(allocator); + defer name_result.deinit(); + var ext_result = ArrayList(u8).init(allocator); + defer ext_result.deinit(); + // Build 8.3 filename if (clean_name.items.len <= 8 and clean_ext.items.len <= 3) { // Name fits in 8.3, use as-is - try result.appendSlice(clean_name.items); - if (clean_ext.items.len > 0) { - try result.append('.'); - try result.appendSlice(clean_ext.items); - } + try name_result.appendSlice(clean_name.items); + try ext_result.appendSlice(clean_ext.items); } else { // Need to abbreviate with ~1 const max_name_len = if (clean_name.items.len > 6) 6 else clean_name.items.len; - try result.appendSlice(clean_name.items[0..max_name_len]); - try result.appendSlice("~1"); + try name_result.appendSlice(clean_name.items[0..max_name_len]); + try name_result.appendSlice("~1"); if (clean_ext.items.len > 0) { - try result.append('.'); const max_ext_len = if (clean_ext.items.len > 3) 3 else clean_ext.items.len; - try result.appendSlice(clean_ext.items[0..max_ext_len]); + try ext_result.appendSlice(clean_ext.items[0..max_ext_len]); } } - return allocator.dupe(u8, result.items); + return .{ .name = try allocator.dupe(u8, name_result.items), .ext = try allocator.dupe(u8, ext_result.items) }; } |