diff --git a/nimbase.nimble b/nimbase.nimble index 993dc62..4de5f75 100644 --- a/nimbase.nimble +++ b/nimbase.nimble @@ -4,10 +4,10 @@ author = "joachimschmidt557" description = "Basic utilities written in Nim" license = "Unlicense" -requires "nim >= 0.19.0" +requires "nim >= 0.19.4" requires "cligen >= 0.9.19" requires "stint >= 0.0.1" -bin = @["add", "cat", "cp", "div", "echo", "factor", "false", "head", "mkdir", "mul", "nl", "pwd", "rev", "rm", "seq", "shuf", "sleep", "sub", "tac", "tee", "touch", "true", "wc", "yes"] +bin = @["add", "cat", "cp", "div", "echo", "factor", "false", "head", "mkdir", "mul", "nl", "pwd", "rev", "rm", "seq", "shuf", "sleep", "sub", "tail", "tac", "tee", "touch", "true", "wc", "yes"] binDir = "bin" diff --git a/tail.nim b/tail.nim new file mode 100644 index 0000000..aa2b89d --- /dev/null +++ b/tail.nim @@ -0,0 +1,29 @@ +import cligen, os, math, deques +import common + +proc main(files:seq[string], lines=10, bytes=0, quiet=false) = +# if files.len == 0: +# files.add "-" + for file in files: + if files.len > 1 and not quiet: + writeLine(stdout, "==> " & (if file == "-": "standard input" else: file) & " <==") + var f = if file == "-": stdin + else: open(file, fmRead) + if bytes > 0: + var q = initDeque[char]() + while not f.endOfFile: + if q.len > bytes: + q.popFirst + q.addLast(f.readChar) + for item in q.items: + write(stdout, item) + elif lines > 0: + var q = initDeque[string]() + for line in lines(f): + if q.len > lines: + q.popFirst + q.addLast line + for line in q.items: + writeLine(stdout, line) + +dispatch(main, version=("version", nimbaseVersion))