diff --git a/cat.nim b/cat.nim index 4c810c9..5dd19a9 100644 --- a/cat.nim +++ b/cat.nim @@ -3,11 +3,19 @@ import common proc catFile(file:string) = if not existsFile(file): - echo "cat: " & file & ": No such file or directory" + err "cat: " & file & ": No such file or directory" system.quit 1 - var s = newFileStream(file, fmRead) - while not s.atEnd: - write(stdout, s.readChar) + const bufSize = 1024 + var + f = open(file, fmRead) + buffer {.noinit.}: array[bufSize, char] + while true: + let readBytes = readBuffer(f, addr(buffer[0]), bufSize) + if readBytes == 0: + break + discard writeBuffer(stdout, addr(buffer[0]), readBytes) + if readBytes < bufSize: + break proc catStdin() = var line = "" diff --git a/common.nim b/common.nim index d43c8a1..84aad2c 100644 --- a/common.nim +++ b/common.nim @@ -2,3 +2,6 @@ const nimbaseVersion* = "0.0.1" + +proc err*(x:string) = + writeLine(stderr, x) diff --git a/nimbase.nimble b/nimbase.nimble index e6b07f9..929969b 100644 --- a/nimbase.nimble +++ b/nimbase.nimble @@ -8,6 +8,6 @@ requires "nim >= 0.19.0" requires "cligen >= 0.9.19" requires "stint >= 0.0.1" -bin = @["add", "cat", "cp", "div", "echo", "factor", "false", "head", "mkdir", "mul", "rm", "seq", "sleep", "sub", "tee", "touch", "true", "yes"] +bin = @["add", "cat", "cp", "div", "echo", "factor", "false", "head", "mkdir", "mul", "pwd", "rm", "seq", "sleep", "sub", "tee", "touch", "true", "yes"] binDir = "bin" diff --git a/pwd.nim b/pwd.nim new file mode 100644 index 0000000..9ab7ec5 --- /dev/null +++ b/pwd.nim @@ -0,0 +1,7 @@ +import os, cligen +import common + +proc main() = + echo getCurrentDir() + +dispatch(main, version=("version", nimbaseVersion))