summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Andreas Benkard <code@mail.matthias.benkard.de>2025-08-14 20:34:10 +0200
committerMatthias Andreas Benkard <code@mail.matthias.benkard.de>2025-08-14 20:34:20 +0200
commite06ac6532d13913c9f2910bbc4d4e6c56e48d37b (patch)
tree778eb57bcd9860209c5c4a06b197a1beae6f5b77
parentaf64a8fb6f8d0651d1881166d79fccbc2c2872f3 (diff)
DIR: Fix tabular output format.
-rw-r--r--src/cmd/dir.zig7
-rw-r--r--src/eval.zig1
-rw-r--r--src/main.zig12
-rw-r--r--src/paths.zig39
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) };
}