aboutsummaryrefslogtreecommitdiffstats
path: root/usr/save.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 /usr/save.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 'usr/save.c')
-rw-r--r--usr/save.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/usr/save.c b/usr/save.c
new file mode 100644
index 0000000..1755fea
--- /dev/null
+++ b/usr/save.c
@@ -0,0 +1,19 @@
+#include "gbos.h"
+/* save <name>: read one line from stdin and store it as a file. */
+void main(void) {
+ char *argv[4];
+ unsigned char argc = argv_parse(argv, 4);
+ unsigned char fd;
+ char c;
+ if (argc < 1) { puts("usage: save <name>"); nl(); return; }
+ fd = open(argv[0], O_WRITE);
+ if (fd > 3) { puts("save: cannot create"); nl(); return; }
+ for (;;) {
+ c = readc();
+ if (c == EOF) break;
+ putc(c); /* echo */
+ fputc(fd, c);
+ if (c == '\n') break;
+ }
+ close(fd);
+}