aboutsummaryrefslogtreecommitdiffstats
path: root/c/wc.c
diff options
context:
space:
mode:
authoruser <user@clank>2026-07-18 00:38:38 +0200
committeruser <user@clank>2026-07-18 00:38:38 +0200
commitba2d7ae1d7b319645b10aaa31a7f664f9f80c25c (patch)
treee01e6c7c710a661defe2515ff9657f08cddcb283 /c/wc.c
parenttools: gbtype prints hub errors to stderr and exits 1 (diff)
downloadgbos-ba2d7ae1d7b319645b10aaa31a7f664f9f80c25c.tar.gz
gbos-ba2d7ae1d7b319645b10aaa31a7f664f9f80c25c.tar.xz
gbos-ba2d7ae1d7b319645b10aaa31a7f664f9f80c25c.zip
refactor: c/ -> usr/, compiled program blobs out of the source tree
Userland sources live in usr/ (fits the Unix theme better than 'c'). SDCC output .bin blobs land in build/usr/ with the other build artifacts instead of littering the source dir; programs.asm INCBINs them from there. Byte-identical ROM.
Diffstat (limited to 'c/wc.c')
-rw-r--r--c/wc.c32
1 files changed, 0 insertions, 32 deletions
diff --git a/c/wc.c b/c/wc.c
deleted file mode 100644
index 4fa48ee..0000000
--- a/c/wc.c
+++ /dev/null
@@ -1,32 +0,0 @@
-#include "gbos.h"
-/* wc [-l][-w][-c] [file]: count lines/words/chars of a file or stdin. */
-void main(void) {
- char *argv[8];
- unsigned char argc = argv_parse(argv, 8);
- unsigned char wl = hasflag(argv, argc, 'l');
- unsigned char ww = hasflag(argv, argc, 'w');
- unsigned char wch = hasflag(argv, argc, 'c');
- unsigned int lines = 0, words = 0, chars = 0;
- unsigned char inword = 0, first = 1, i, fd = NOFD;
- char *fname = 0;
- int ch;
- if (!wl && !ww && !wch) { wl = ww = wch = 1; }
- for (i = 0; i < argc; i++) if (argv[i][0] != '-') { fname = argv[i]; break; }
- if (fname) {
- fd = open(fname, O_READ);
- if (fd > 3) { puts("wc: no such file"); nl(); return; }
- }
- for (;;) {
- if (fd > 3) { char c = readc(); if (c == EOF) break; ch = c; }
- else { ch = fgetc(fd); if (ch < 0) break; }
- chars++;
- if (ch == '\n') lines++;
- if (ch == ' ' || ch == '\n' || ch == '\r' || ch == '\t') inword = 0;
- else if (!inword) { inword = 1; words++; }
- }
- if (fd != NOFD) close(fd);
- if (wl) { putu(lines); first = 0; }
- if (ww) { if (!first) putc(' '); putu(words); first = 0; }
- if (wch) { if (!first) putc(' '); putu(chars); }
- nl();
-}