make
The current status of this entry is:
STATUS: INABIAF - please **DO NOT** fix
For more detailed information see 2019 burton bugs.
./prog < file
./cow file
./try.sh
A tiny, but punctually correct way of POSIX counting for text files. This one line, one word, 127 character beauty continues to expand the number of classic unix utilities available as winning entries.
You might find the author’s commentary on one liners interesting.
Feed it anything on stdin
.
The output should look familiar.
Compiles cleanly with:
WARN="-Wno-implicit-int -Wno-missing-variable-declarations -Wno-parentheses"
cc -Wall -Wextra -Weverything -pedantic $WARN -include stdio.h -o prog prog.c
Included is a test script, useful for the corner cases. As in all good Unix programs, it is silent upon success; any output demonstrates an error. Instead of checking correctness, the check.sh script can simply output the results: (The Makefile contains the spoiler):
out=cat ./check.sh ./prog
Interestingly, and a spoiler here: macOS and FreeBSD implement the common
utility “correctly”. CentOS and Ubuntu both share a “flawed” utility that
changes output format based upon input redirection or pipeline(!). As well, the
latter two also behave slightly differently on what they count as whitespace:
\a
and \b
are both counted whitespace(!), even though the relevant man pages
on these systems omit these characters from the description.
This program follows FreeBSD and macOS, the arbiters of correct for these purposes.
Requires the C locale and ASCII character set. Input should be less than ten million octets “toavoidthisproblem”.
You can enjoy this code from beginning to end. No whitespace was harmed in the creation of this program. All your base belong to us, but the constants seem a bit … off?
The script cow.sh provides a closer analog, and perhaps a more useful interface.
Included is a version without compilation warnings:
cc -Wall -Wextra -Weverything -pedantic -include stdio.h -o prog.clean prog.clean.c
The flags are not supported. Although they could easily be added into cow.sh
.
This exercise left to the reader.