diff --git a/cat.nim b/cat.nim index ed4dee9..a379392 100644 --- a/cat.nim +++ b/cat.nim @@ -1,4 +1,4 @@ -import cligen, os, streams +import cligen, os import common proc catFile(file:string) = diff --git a/cp.nim b/cp.nim index 1a13338..f6029a3 100644 --- a/cp.nim +++ b/cp.nim @@ -1,7 +1,7 @@ import cligen, os import common -proc main() = +proc main(files:seq[string]) = echo "asdf" dispatch(main, version=("version", nimbaseVersion)) diff --git a/echo.nim b/echo.nim index f4f83e8..50113c8 100644 --- a/echo.nim +++ b/echo.nim @@ -1,11 +1,11 @@ import cligen, sequtils import common -proc main(strings:seq[string], newline=true) = +proc main(strings:seq[string], newline=true, nospaces=false) = if newline: - writeLine(stdout, strings.foldl(a & " " & b)) + writeLine(stdout, strings.foldl(a & (if nospaces: "" else: " ") & b)) else: - write(stdout, strings.foldl(a & " " & b)) + write(stdout, strings.foldl(a & (if nospaces: "" else: " ") & b)) flushFile(stdout) dispatch(main, version=("version", nimbaseVersion)) diff --git a/head.nim b/head.nim index a4b6c82..ccc2994 100644 --- a/head.nim +++ b/head.nim @@ -1,10 +1,12 @@ -import cligen, os, streams +import cligen, os import common -proc main(files:seq[string], lines=10, bytes=0) = +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: @@ -14,8 +16,10 @@ proc main(files:seq[string], lines=10, bytes=0) = inc currentByte elif lines > 0: var currentLine = 0 - while not f.endOfFile and currentLine < lines: - writeLine(stdout, f.readLine) + for line in lines(f): + if currentLine >= lines: + break + writeLine(stdout, line) inc currentLine dispatch(main, version=("version", nimbaseVersion)) diff --git a/nimbase.nimble b/nimbase.nimble index 5ce89db..993dc62 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", "nl", "pwd", "rev", "rm", "seq", "shuf", "sleep", "sub", "tac", "tee", "touch", "true", "yes"] +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"] binDir = "bin" diff --git a/rev.nim b/rev.nim index 5a98b86..e8cf9e5 100644 --- a/rev.nim +++ b/rev.nim @@ -1,4 +1,4 @@ -import cligen, os, streams, unicode +import cligen, os, unicode import common proc catFile(file:string) = diff --git a/seq.nim b/seq.nim index a6e010f..5c53eba 100644 --- a/seq.nim +++ b/seq.nim @@ -1,7 +1,19 @@ import cligen import common -proc main(last:int, first=1, increment=1, separator="\n") = +proc main(numbers:seq[int], separator="\n") = + if numbers.len < 1: + err "seq: missing operand" + quit 1 + if numbers.len > 3: + err "seq: extra operand" + quit 1 + let + last = numbers[numbers.high] + first = if numbers.len > 1: numbers[0] + else: 1 + increment = if numbers.len == 3: numbers[1] + else: 1 var i = first while i <= last: write(stdout, i) diff --git a/tac.nim b/tac.nim index f3833b1..abe19b7 100644 --- a/tac.nim +++ b/tac.nim @@ -1,4 +1,4 @@ -import cligen, os, streams +import cligen, os import common proc catFile(file:string) = diff --git a/tee.nim b/tee.nim index c6cca19..aee4e7c 100644 --- a/tee.nim +++ b/tee.nim @@ -4,11 +4,10 @@ import common proc main(files:seq[string]) = var fileStreams:seq[Stream] - line = "" for file in files: fileStreams.add(newFileStream(file, fmWrite)) - while stdin.readLine(line): - echo line + for line in lines(stdin): + writeLine(stdout, line) for fStream in fileStreams: writeLine(fStream, line) diff --git a/wc.nim b/wc.nim new file mode 100644 index 0000000..9452f3e --- /dev/null +++ b/wc.nim @@ -0,0 +1,29 @@ +import cligen, os, strutils +import common + +proc main(files:seq[string]) = +# if files.len == 0: +# files.add "-" + var + totalLines = 0 + totalWords = 0 + totalChars = 0 + for file in files: + var f = if file == "-": stdin + else: open(file, fmRead) + var + fileLines = 0 + fileWords = 0 + fileChars = 0 + for line in lines(f): + inc fileLines + fileWords += line.split.len + fileChars += line.len + totalLines += fileLines + totalWords += fileWords + totalChars += fileChars + writeLine(stdout, $(fileLines) & $(fileWords) & $(fileChars) & file) + if files.len > 1: + writeLine(stdout, $(totalLines) & $(totalWords) & $(totalChars) & "total") + +dispatch(main, version=("version", nimbaseVersion))