add lc version, various improvements.
This commit is contained in:
parent
496cd811a1
commit
16168840c3
11
README.md
11
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~~
|
- ~~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)
|
- [ ] 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~~
|
- ~~[ ] 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
|
- [ ] Distinguish between reading from stdin and reading from a file
|
||||||
- If it doesn't have arguments, read from stdin.
|
- If it doesn't have arguments, read from stdin.
|
||||||
- [ ] Open files, read characters.
|
- [ ] Open files, read characters.
|
||||||
- [ ] Write version that counts lines
|
- [ ] Write version that counts lines
|
||||||
- [ ] Document reading from user-inputed stdin (end with Ctrl+D)
|
- [ ] Document reading from user-inputed stdin (end with Ctrl+D)
|
||||||
|
- [ ] Write man files?
|
||||||
|
- [ ] Write a version for other coreutils? <https://git.busybox.net/busybox/tree/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")
|
||||||
|
|
35
lc/lc.c
Normal file
35
lc/lc.c
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
|
@ -8,8 +8,8 @@ CC=gcc
|
||||||
# CC=tcc # <= faster compilation
|
# CC=tcc # <= faster compilation
|
||||||
|
|
||||||
# Main file
|
# Main file
|
||||||
SRC=ww.c
|
SRC=lc.c
|
||||||
OUT=ww
|
OUT=lc
|
||||||
|
|
||||||
## Flags
|
## Flags
|
||||||
DEBUG= #'-g'
|
DEBUG= #'-g'
|
||||||
|
@ -34,7 +34,7 @@ install:
|
||||||
|
|
||||||
test: $(OUT)
|
test: $(OUT)
|
||||||
/bin/echo -e "123\n45 67" | ./$(OUT)
|
/bin/echo -e "123\n45 67" | ./$(OUT)
|
||||||
/bin/echo -n "" | ./ww
|
/bin/echo -n "" | ./lc
|
||||||
/bin/echo " xx x" | ./$(OUT) -w
|
/bin/echo " xx x" | ./$(OUT) -w
|
||||||
./$(OUT) $(SRC)
|
./$(OUT) $(SRC)
|
||||||
./$(OUT) nonexistent_file || true
|
./$(OUT) nonexistent_file || true
|
40
wc/makefile
Normal file
40
wc/makefile
Normal file
|
@ -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
|
BIN
ww → wc/wc
BIN
ww → wc/wc
Binary file not shown.
|
@ -33,9 +33,9 @@ int main(int argc, char** argv)
|
||||||
}
|
}
|
||||||
return wc(fp) && fclose(fp);
|
return wc(fp) && fclose(fp);
|
||||||
} else {
|
} else {
|
||||||
printf("Usage: ww file.txt\n");
|
printf("Usage: wc file.txt\n");
|
||||||
printf(" or: cat file.txt | ww\n");
|
printf(" or: cat file.txt | wc\n");
|
||||||
printf(" or: ww # read from user-inputted stdin\n");
|
printf(" or: wc # read from user-inputted stdin\n");
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user