From 16168840c3172c0f3297452652c5002f995aca3b Mon Sep 17 00:00:00 2001 From: NunoSempere Date: Sun, 10 Sep 2023 15:05:28 +0200 Subject: [PATCH] add lc version, various improvements. --- README.md | 11 ++++++++++- lc/lc | Bin 0 -> 17080 bytes lc/lc.c | 35 +++++++++++++++++++++++++++++++++++ makefile => lc/makefile | 6 +++--- wc/makefile | 40 ++++++++++++++++++++++++++++++++++++++++ ww => wc/wc | Bin 17080 -> 17080 bytes ww.c => wc/wc.c | 6 +++--- 7 files changed, 91 insertions(+), 7 deletions(-) create mode 100755 lc/lc create mode 100644 lc/lc.c rename makefile => lc/makefile (88%) create mode 100644 wc/makefile rename ww => wc/wc (98%) rename ww.c => wc/wc.c (83%) diff --git a/README.md b/README.md index f11ecde..c5dd2dc 100644 --- a/README.md +++ b/README.md @@ -30,9 +30,18 @@ The plan9port version of wc ([github](https://github.com/9fans/plan9port/blob/ma - ~~Maybe make some pull requests, if I'm doing something better? => doesn't seem like it~~ - [ ] Install to ww, but check that ww is empty (installing to wc2 or smth would mean that you don't save that many keypresses vs wc -w) - ~~[ ] Could use zig? => Not for now~~ -- [ ] Look specifically at how other versions +- [ ] Look specifically at how other versions do stuff. - [ ] Distinguish between reading from stdin and reading from a file - If it doesn't have arguments, read from stdin. - [ ] Open files, read characters. - [ ] Write version that counts lines - [ ] Document reading from user-inputed stdin (end with Ctrl+D) +- [ ] Write man files? +- [ ] Write a version for other coreutils? ? Would be a really nice project. + - Simple utils. +- zig? +- https://github.com/leecannon/zig-coreutils +- https://github.com/keiranrowan/tiny-core/tree/master +- [x] Add lc + - Take into account what happens if file doesn't end in newline. +- [ ] add chc (cc is "c compiler") diff --git a/lc/lc b/lc/lc new file mode 100755 index 0000000000000000000000000000000000000000..02d05d233b0194e863458ade950d1fc6c4924251 GIT binary patch literal 17080 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 LHCDR}TrB$+1m3B{ literal 0 HcmV?d00001 diff --git a/lc/lc.c b/lc/lc.c new file mode 100644 index 0000000..01c7043 --- /dev/null +++ b/lc/lc.c @@ -0,0 +1,35 @@ +#include +#include + +int lc(FILE* fp) +{ + char c[1]; + int num_lines = 0; + int fn = fileno(fp); + while (read(fn, c, sizeof(c)) > 0) { + if (*c == '\n' ) { + num_lines ++; + } + } + printf("%i\n", num_lines); + return 0; +} + +int main(int argc, char** argv) +{ + if (argc == 1) { + return lc(stdin); + } else if (argc > 1) { + FILE* fp = fopen(argv[1], "r"); + if (!fp) { + perror("Could not open file"); + return 1; + } + return lc(fp) && fclose(fp); + } else { + printf("Usage: lc file.txt\n"); + printf(" or: cat file.txt | lc\n"); + printf(" or: lc # read from user-inputted stdin\n"); + } + return 0; +} diff --git a/makefile b/lc/makefile similarity index 88% rename from makefile rename to lc/makefile index 5ea6258..b23e67b 100644 --- a/makefile +++ b/lc/makefile @@ -8,8 +8,8 @@ CC=gcc # CC=tcc # <= faster compilation # Main file -SRC=ww.c -OUT=ww +SRC=lc.c +OUT=lc ## Flags DEBUG= #'-g' @@ -34,7 +34,7 @@ install: test: $(OUT) /bin/echo -e "123\n45 67" | ./$(OUT) - /bin/echo -n "" | ./ww + /bin/echo -n "" | ./lc /bin/echo " xx x" | ./$(OUT) -w ./$(OUT) $(SRC) ./$(OUT) nonexistent_file || true diff --git a/wc/makefile b/wc/makefile new file mode 100644 index 0000000..fbe9998 --- /dev/null +++ b/wc/makefile @@ -0,0 +1,40 @@ +# Interface: +# make +# make build +# make format + +# Compiler +CC=gcc +# CC=tcc # <= faster compilation + +# Main file +SRC=wc.c +OUT=wc + +## Flags +DEBUG= #'-g' +STANDARD=-std=c99 +WARNINGS=-Wall +OPTIMIZED=-O3 +# OPTIMIZED=-O3 #-Ofast + +## Formatter +STYLE_BLUEPRINT=webkit +FORMATTER=clang-format -i -style=$(STYLE_BLUEPRINT) + +## make build +build: $(SRC) + $(CC) $(OPTIMIZED) $(DEBUG) $(SRC) -o $(OUT) + +format: $(SRC) + $(FORMATTER) $(SRC) + +install: + cp -n $(OUT) /bin/ww ## don't overwrite old standard wc. + +test: $(OUT) + /bin/echo -e "123\n45 67" | ./$(OUT) + /bin/echo -n "" | ./wc + /bin/echo " xx x" | ./$(OUT) -w + ./$(OUT) $(SRC) + ./$(OUT) nonexistent_file || true diff --git a/ww b/wc/wc similarity index 98% rename from ww rename to wc/wc index 58c8de80ad2a3329b124da2ce61777e3a7bb9d40..fd53c5659a5d2905be64d6185630e94aae6a53f7 100755 GIT binary patch delta 71 zcmdnd%DAJIaYF{PNUvgrl(($<3M0dZY6&Nu74}XkT)(-7d6f)f@?>=dMZshS2vAT^ X$S<-|C{NxTsc=(_F?qAGc`G*nQd<@F delta 71 zcmdnd%DAJIaYF{P$lXJET5&r9w4xRMrpf*db#eXBnYOuxd6f)f`DAqkMZt0g2vAT^ X$S<-|C@