From b9038b1c6b31a8f8d6b8b648cee0cf3b457dc24c Mon Sep 17 00:00:00 2001 From: Nathan Reiner Date: Thu, 15 Dec 2022 22:46:25 +0100 Subject: first version of io and wstdf --- lib/io/io.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 lib/io/io.c (limited to 'lib/io/io.c') diff --git a/lib/io/io.c b/lib/io/io.c new file mode 100644 index 0000000..41cd3e0 --- /dev/null +++ b/lib/io/io.c @@ -0,0 +1,50 @@ +#include "io.h" + +#include "../cstr/cstr.h" + +void __wstdn(const char *buf, u64 n) +{ + write(STDOUT_FD, buf, n); +} + + +void wstd(const char *buf) +{ + __wstdn(buf, cstr_length(buf)); +} + + +void rstd(char *buf, unsigned long count) +{ + read(STDIN_FD, buf, count); +} + +void wstdf__(const char *buf, void **args) +{ + const char *start = buf; + for (; *buf; ++buf) { + if (*buf == '%') { + if (buf - start > 0) + __wstdn(start, buf - start); + + ++buf; + + switch (*buf) { + case '%': __wstdn("%", 1); break; + case 's': + __wstdn(((const char **)args)[0], cstr_length(((const char**)args)[0])); + ++args; break; + } + + start = buf + 1; + } + } + + if (buf - start > 0) + __wstdn(start, buf - start); +} + +int main() { + void *args[] = { "hallo", "welt" }; + wstdf__("%s %s\n", args); +} -- cgit v1.2.3-70-g09d2