#include "io.h" #include "../cstr/cstr.h" #include "../aec/aec.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, const void **args) { const char *start = buf; char stoi_buf[32] = ""; int i; 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; case 'i': for (i = 0; i < 32; ++i) stoi_buf[i] = 0; i64_to_cstr(((u64 *)args)[0], stoi_buf, 32); __wstdn(stoi_buf, cstr_length(stoi_buf)); break; case 'u': for (i = 0; i < 32; ++i) stoi_buf[i] = 0; u64_to_cstr(((u64 *)args)[0], stoi_buf, 32); __wstdn(stoi_buf, cstr_length(stoi_buf)); break; case 'S': sgr(((const char **)args)[0]); ++args; break; case 'F': foreground(((const char **)args)[0]); ++args; break; case 'B': background(((const char **)args)[0]); ++args; break; } start = buf + 1; } } if (buf - start > 0) __wstdn(start, buf - start); } #ifdef IO_LIB_UNIT_TEST int main() { wstdf("%s %S%F%s%S\n", "hallo", SGR_UNDERLINE, COLOR_RED, "welt", SGR_RESET); } #endif