@@ -1,56 +1,20 @@ #include #include #include -typedef struct buffer { - char* cur; - kiochan channel; - sz run; - char buf []; -} buffer; - -static buffer* -buffer_new(void* mem, kiochan channel, sz run) { - buffer* r = mem; - r -> cur = r -> buf; - r -> channel = channel; - r -> run = run; - return r; -} - -static kiocond -buffer_flush(buffer* b) { - ksraw str = {b -> cur - b -> buf, b -> buf}; - b -> cur = b -> buf; - return kiosend(b -> channel, str, null); -} - -static kcond -buffer_send(buffer* b, const char* str) { - ksmut buf = { b->run - (b->cur - b->buf), b->cur }; - ksraw src = { 0, str }; - kscond sc = kscp(src, buf, &src.size); - if (sc != kscond_ok) return sc; - - b->cur += src.size; - if (b->cur >= (b->buf + b->run)) { - return buffer_flush(b); - } else return kiocond_ok; -} - kcond kcli_usage(kcli_set prg, kiochan ch) { - ubyte buf_space [sizeof(buffer) + 256]; - buffer* out = buffer_new(buf_space, ch, 256); + ubyte buf_space [sizeof(ksbuf) + 256]; + ksbuf* out = ksbufmk(buf_space, ch, 256); const char* msg [] = { prg.name, " v", prg.version, "\n\n", prg.desc, "\n\n", }; - for (sz i = 0; i != sizeof msg / sizeof msg[0]; ++ i) { - kcond c = buffer_send(out, msg[i]); - if (!kokay(c)) return c; + for (sz i = 0; i != Kmsz(msg); ++ i) { + ksraw str = { 0, msg[i] }; + kcond c = ksbufput(out, str); } - return buffer_flush(out); + return ksbufflush(out); }