From 7a71bcca61de97bdd282947df346e5598b17023f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=AB=8F=E8=A8=AA=E5=AD=90?= Date: Mon, 14 Aug 2023 16:08:04 +0900 Subject: [PATCH] =?UTF-8?q?cat=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/cat.zig | 56 ++++++++++++++++++++++++++++++----------------------- 1 file changed, 32 insertions(+), 24 deletions(-) diff --git a/src/cat.zig b/src/cat.zig index 3f409ac..2d4455e 100644 --- a/src/cat.zig +++ b/src/cat.zig @@ -75,33 +75,41 @@ pub fn main() !void { } if (fname.items.len == 0) { - try help(); - return; - } - - for (fname.items) |item| { - const file = try fs.cwd().openFile(item, .{}); - defer file.close(); - - var buf: [1024]u8 = undefined; + const stdin = io.getStdIn().reader(); + var buf: [2048]u8 = undefined; while (true) { - const result = try file.reader().readUntilDelimiterOrEof(buf[0..], '\n') orelse break; - if (issqz and std.mem.trimRight(u8, result, "\n\r").len == 0) continue; - const stripped = std.mem.trim(u8, result, " \n\t\r"); + const lne = try stdin.read(buf[0..]); + if (lne == 0) { + break; + } - if (isone) { - try io.getStdOut().writer().writeAll(stripped); - } else { - if (isnum or (isnun and stripped.len != 0)) { - line_number += 1; - try io.getStdOut().writer().print(" {:3} | ", .{line_number}); - } else if (isnum) { - line_number += 1; - try io.getStdOut().writer().print(" {:3} | ", .{line_number}); + try io.getStdOut().writer().writeAll(buf[0..lne]); + } + } else { + for (fname.items) |item| { + const file = try fs.cwd().openFile(item, .{}); + defer file.close(); + + var buf: [1024]u8 = undefined; + while (true) { + const result = try file.reader().readUntilDelimiterOrEof(buf[0..], '\n') orelse break; + if (issqz and std.mem.trimRight(u8, result, "\n\r").len == 0) continue; + const stripped = std.mem.trim(u8, result, " \n\t\r"); + + if (isone) { + try io.getStdOut().writer().writeAll(stripped); + } else { + if (isnum or (isnun and stripped.len != 0)) { + line_number += 1; + try io.getStdOut().writer().print(" {:3} | ", .{line_number}); + } else if (isnum) { + line_number += 1; + try io.getStdOut().writer().print(" {:3} | ", .{line_number}); + } + + try io.getStdOut().writer().writeAll(result); + try io.getStdOut().writer().print("\n", .{}); } - - try io.getStdOut().writer().writeAll(result); - try io.getStdOut().writer().print("\n", .{}); } } }